Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 无法求解匈牙利算法_Algorithm_Graph_Hungarian Algorithm - Fatal编程技术网

Algorithm 无法求解匈牙利算法

Algorithm 无法求解匈牙利算法,algorithm,graph,hungarian-algorithm,Algorithm,Graph,Hungarian Algorithm,我试图实现一个函数来解决这个问题,我认为我对这个算法有一些误解 测试的目的是使用谷歌的C++,它是有效的。 但是当我测试这个14x11矩阵时,它说,不可能解出: [0 0 0 0 0 0 0 0 0] [53 207 256 207 231 348 348 348 231 244] [240 33 67 33 56 133 133 56 33] [460 107 200 107 122 324 324 122 33] [16734039634042256756756742242442] [167

我试图实现一个函数来解决这个问题,我认为我对这个算法有一些误解

<>测试的目的是使用谷歌的C++,它是有效的。 但是当我测试这个14x11矩阵时,它说,不可能解出

[0 0 0 0 0 0 0 0 0]

[53 207 256 207 231 348 348 348 231 244]

[240 33 67 33 56 133 133 56 33]

[460 107 200 107 122 324 324 122 33]

[16734039634042256756756742242442]

[167 367 307 367 433 336 336 336 433 158]

[160 20 37 20 31 70 31 22]

[200 307 393 307 222 364 364 364 222 286]

[33 153 152 153 228 252 252 252 228 78]

[93 140 185 140 58 118 118 58 44]

[0 7 22 7 19 58 58 19 0 0]

[67 153 241 153 128 297 297 297 128 39]

[7325338925353953953925336]

[173 267 270 267 322 352 352 352 322 231 231]

<创建数组的C++代码:(如果有人想通过使用我提供的C++示例来测试它)

int r[14*11]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 207, 256, 207, 231, 348, 348, 348, 231, 244, 244, 240, 33, 67, 33, 56, 133, 133, 133, 56, 33, 33, 460, 107, 200, 107, 122, 324, 324, 324, 122, 33, 33, 167, 340, 396, 340, 422, 567, 567, 567, 422, 442, 442, 167, 367, 307, 367, 433, 336, 336, 336, 433, 158, 158, 160, 20, 37, 20, 31, 70, 70, 70, 31, 22, 22, 200, 307, 393, 307, 222, 364, 364, 364, 222, 286, 286, 33, 153, 152, 153, 228, 252, 252, 252, 228, 78, 78, 93, 140, 185, 140, 58, 118, 118, 118, 58, 44, 44, 0, 7, 22, 7, 19, 58, 58, 58, 19, 0, 0, 67, 153, 241, 153, 128, 297, 297、297、128、39、39、73、253、389、253、253、539、539、539、253、36、36、173、267、270、267、322、352、352、352、322、231、231}

如果我运行我的实现来减少零的数量(这样它们就可以被最少的行数覆盖-顶部提供的wikihow链接中的步骤9-),我会得到下面的矩阵,其中我必须找到行和列的唯一0组合

问题是不可能解决,因为第10列和第11列(粗体)各只有一个0,并且位于同一行中

第1行:[240 140 225 140 206 339 339 2062150]

第2行:[254 0 37 0 43 58 58 433867]

第3行:[0 107 158 107 151 206 206 206 1511820 0]

第4行:[0 253 245 253 304 235 235 304402402220]

第5行:[300 27 56 27 11 0 0 110 0227 227]

第6行:[300 0 145 0 230 0284 284227 227]

第7行:[80 120 188 120 176 269 269 269 176193 1930]

第8行:[2070 0 151 143 15196167]

第9行:[229 95 9 0 110 110 110 015922]

第10行:[1470 40 0 148 221 221 221 1481710 0]

第11行:[240 133 203 133 187 282 282 1872150]

第12行:[1893039458589419219216]

第13行:[367 87 36 87 153 0 0 153379 379200]

第14行:[1940 82 0 11 115 11112127]


这个方法有什么限制吗?或者只是我,算法的实现不好?在这种情况下,为什么“应该工作”的例子也不工作

任何建议将不胜感激,或者如果您知道任何技巧或建议,以帮助找到最小行数覆盖零,请让我知道


提前感谢,

请注意,在第(2)节提供的链接中,您添加了虚拟行或列,以确保矩阵是方形的


现在您有了一个方阵,有大量不同的匹配将每一行与其自己的列链接在一起,反之亦然。解决方案或解决方案只是这些匹配中成本最低的一种,因此应该始终存在解决方案。

此方法有任何限制吗 是的。只有当你在每一步都完成了最大数量的作业时,这种画线的方法才能正常工作。我并不特别想用手来证明这一点,但我认为你使用的代码对于这个特定的矩阵并不能做到这一点。我决定解决它(又称拖延)尽我所能,从缺乏文档中可以看出,它实际上没有用最少的行数覆盖所有的零的问题。它只是不擅长分配任务

我在网上找到的匈牙利算法的每一个实现都不起作用。不幸的是,它们都是在没有真正学习其背后的数学知识的情况下相互复制的,因此它们都错了。我实现了与Munkres在文章中描述的类似的东西
  0   0   0   0   0   0   0   0   0   0   0
 53 207 256 207 231 348 348 348 231 244 244
240  33  67  33  56 133 133 133  56  33  33
460 107 200 107 122 324 324 324 122  33  33
167 340 396 340 422 567 567 567 422 442 442
167 367 307 367 433 336 336 336 433 158 158
160  20  37  20  31  70  70  70  31  22  22
200 307 393 307 222 364 364 364 222 286 286
 33 153 152 153 228 252 252 252 228  78  78
 93 140 185 140  58 118 118 118  58  44  44
  0   7  22   7  19  58  58  58  19   0   0
 67 153 241 153 128 297 297 297 128  39  39
 73 253 389 253 253 539 539 539 253  36  36
173 267 270 267 322 352 352 352 322 231 231