gpt4 book ai didi

c# - Floyd-Warshall 找不到问题所在

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:21 24 4
gpt4 key购买 nike

我需要对此有新的认识,由于某种原因它没有生成正确的序列和距离矩阵,以下是我的实现。

这是在 C# 中,DistanceMatrix 是一个双 [,] 而 SequenceMatrix 是一个字符串 [,]

这些启动如下:http://puu.sh/951Tz/5ef27e3996.png

for (int k = 0; k < villageCount; k++)
{
for (int i = 0; i < villageCount; i++)
{
if (k == i)
continue;

for (int j = 0; j < villageCount; j++)
{
if (j == i)
continue;

if (j == k)
continue;

if (fw.DistanceMatrix[i, j] >= (fw.DistanceMatrix[i, k] + fw.DistanceMatrix[k, j]))
{
fw.DistanceMatrix[i, j] = (fw.DistanceMatrix[i, k] + fw.DistanceMatrix[k, j]);
fw.SequenceMatrix[i, j] = fw.SequenceMatrix[k, j];
}
}
}
}

出于某种原因,我得到以下输出:

    [0, 0]  "A" string
[0, 1] "B" string
[0, 2] "A" string
[0, 3] "B" string
[0, 4] "D" string
[1, 0] "B" string
[1, 1] "D" string
[1, 2] "D" string
[1, 3] "B" string
[1, 4] "D" string
[2, 0] "B" string
[2, 1] "B" string
[2, 2] "B" string
[2, 3] "B" string
[2, 4] "D" string
[3, 0] "B" string
[3, 1] "B" string
[3, 2] "C" string
[3, 3] "C" string
[3, 4] "D" string
[4, 0] "B" string
[4, 1] "E" string
[4, 2] "D" string
[4, 3] "B" string
[4, 4] "E" string

任何指针将不胜感激,如果您需要更多信息,我将 F5ing 此页面:)

初始化后的距离矩阵

    [0, 0]  0.0                                 double
[0, 1] 50.0 double
[0, 2] 2.0 double
[0, 3] 10.0 double
[0, 4] 1.7976931348623157E+308 double
[1, 0] 50.0 double
[1, 1] 0.0 double
[1, 2] 3.0 double
[1, 3] 1.7976931348623157E+308 double
[1, 4] 1.0 double
[2, 0] 2.0 double
[2, 1] 3.0 double
[2, 2] 0.0 double
[2, 3] 5.0 double
[2, 4] 5.0 double
[3, 0] 10.0 double
[3, 1] 1.7976931348623157E+308 double
[3, 2] 5.0 double
[3, 3] 0.0 double
[3, 4] 1.7976931348623157E+308 double
[4, 0] 1.7976931348623157E+308 double
[4, 1] 1.0 double
[4, 2] 5.0 double
[4, 3] 1.7976931348623157E+308 double
[4, 4] 0.0 double

最佳答案

我相信我找到了问题。

您正在错误地初始化 SequenceMatrix。你现在有

fw.SequenceMatrix[i, j] = map.Villages.ElementAt(i).Name;

然而,根据维基百科文章,它应该是

fw.SequenceMatrix[i, j] = map.Villages.ElementAt(**j**).Name;

由于序列矩阵向您显示了要走的路径,因此其中的值应该是目的地,而不是起点。

看起来你的算法也有错误。你有

fw.SequenceMatrix[i, j] = fw.SequenceMatrix[k, j];

但应该是

fw.SequenceMatrix[i, j] = fw.SequenceMatrix[**i, k**];

由于你已经确定从i到k再到j比从i到j更短,所以你想将新路径从i到j的第一步设置为与路径的第一步相同从 i 到 k。

关于c# - Floyd-Warshall 找不到问题所在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com