一个超级难的问题,倾家荡产提问!(229分)

W

wzwh

Unregistered / Unconfirmed
GUEST, unregistred user!
【描述】
如例图,为一完全对称菱形,      ③
你只能从上(入口)往下行走,直  ⑤ ④
到最下结点(出口)结束。请找出 ① ② ⑤
一条最有价值路径,使得将所经过 ⑨ ⑧
的结点上的数值相加所得值最大,       ③
输出此价值和所经过的结点的数值。
【输入文件】(worth.in)
第一行只有一个数n(1≤n≤199),且n为奇数,说明结点的层数。从第二行到第n+1行为每一层中各结点的数值[0,100],各数以空格分割。输入不判错。
【输出文件】(worth.out)
第一行只有一个数,为所求路径的价值数。
第二行有n个数,依次为该路径所经过的结点的数值。
【例子】
输入文件(worth.in)内容
5
3
5 4
1 2 5
9 8
3

输出文件(worth.out)内容
23
3 4 5 8 3
 
有难度,帮顶
 
又是数据结构[xx(]
 
是啊是啊,今天想了一天都解决不了,呵呵。谁能帮帮我!
 
难道真的没人会吗??呜呜!!
 
是不是只能往下走啊?也就是说,每步有两个选择,而且在 N 步内肯定走完的?
 
是啊,一定是N步的
 
定义节点
内容保存和它邻接的节点的指针,并且保存和邻接的节点的距离(模)以及方向(因为不能往回走)。从起点开始,依次寻找离当前节点最远的下一个节点,知道找到最后一个节点。
 
你回复的倒是真快,呵呵。可惜我想了这一会,也没有什么头绪。刚开始以为穷举都可以,后来才发现算错了,路径总量太可怕了。[:(]
 
算法错了。不好意思。
 
如果从我上面的那个算法修改的话。我想应该遍力每一条路径。也就是把当前节点的每一个子节点都经历一边。然后记下值最大的路径
 
遍历肯定是行不通的,运算量太大了。应该能有一个办法在一条路径进行到某个程度的时候就可以判断终止,这样估计才比较有效吧。
 
值得仔细想想
 
3 3
3 8 7 8 7
3->8 7->9 10 12->9 10 12
19 20
23
不知道说得够不够明白?
 
楼上的意思是:从每一行选一个最大值?
这种肯定不行,因为选了某一行的最大值,可能就会失去下一行选择最大值的机会。
要翻数据结构的书才得行啊。
 
我看过书,好像用关键路径的算法实现,但我现在在具体实现上还搞不大清楚!
 
http://www.efile.com.cn/efile/dfw@97546/ss.rar
 
对不起 程序上的 日期 是错的。
 
http://www.efile.com.cn/efile/dfw@97546/sss.rar
199行的

 
http://www.efile.com.cn/efile/dfw@97546/sss.rar
199行的
 
顶部