回 帖 发 新 帖 刷新版面

主题:[讨论]求算法思想!!!

 0    786    650    0    321
689   900     0     0     0
 0     0     476   378    0
 0    178     0    802    0
 0     0      0     0     0

现有一个5x5的方阵(为了简化问题,用5x5的方阵代替),从第一行选出一个数d1(后面选数时不能选d1所在列的数字,比如第一行选786,则第二行不能选900,第四行不能选178,后同),从第二行选出一个数d2......依此类推,最后使得d1 + d2 + ... + d5的值最大。麻烦大家看一下,这个算法该怎么写。

回复列表 (共12个回复)

沙发

只想到硬搜,加的剪枝也需要2^n的空间
数据范围多少?

板凳

20x20的方阵,麻烦你说具体一点,谢谢!

3 楼

用回溯法可以解决问题,但是运行的时间太长了,13*13的矩阵就要9分多钟。
别人说可以用匈牙利算法解,但是我对这个算法一点都不懂,麻烦高手站出来指点一下撒。我的QQ:115108703

4 楼

昏,直接取每列最大的数不就结了

5 楼

当然,要先判断下该行有没被取过值

6 楼

[quote]昏,直接取每列最大的数不就结了[/quote]
晕,要是是这样我就不会提这个问题了,局部最优不代表整体最优。举个例子给你看看,
1    3    0
2    8    0
0    0    4
照你这么说,应该是第一行选3,第二行选2,第三行选4,就是3 + 2 + 4 = 9
但是最优解应该是 1 + 8 + 4 = 13,所以局部最优不代表整体也是最优的。

7 楼

这个不是最大权匹配么?

8 楼

准确来说,这个不是叫匈牙利算法,这个是Kuhn和Munkras提出的KM算法

9 楼

就是这个,你能不能说一下具体怎么做,谢谢!

10 楼

[quote]这个不是最大权匹配么?[/quote]
我呆了……最近对二分图网络流这类东西超没感觉的。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册