Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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
C# Floyd-Warshall算法在迷宫寻路中的应用_C#_Algorithm_Graph Algorithm_Path Finding_Floyd Warshall - Fatal编程技术网

C# Floyd-Warshall算法在迷宫寻路中的应用

C# Floyd-Warshall算法在迷宫寻路中的应用,c#,algorithm,graph-algorithm,path-finding,floyd-warshall,C#,Algorithm,Graph Algorithm,Path Finding,Floyd Warshall,我试图使用Floyd的算法生成一个最快的路线矩阵,通过一个有98个航路点(位于每个迷宫顶点)的迷宫。当算法运行时,它填充两个矩阵-距离矩阵(两个节点之间的最佳距离)和路径矩阵(任意两个节点之间的最佳路径的下一个节点) 距离矩阵用我在前面代码中生成的邻接矩阵初始化。我还生成了一个数据结构,其中包含指向每个航路点的四个可能的相邻航路点的指针,但我没有在生成路径矩阵时使用此数据结构 这是我的c代码: //初始化距离路径矩阵 距离矩阵=邻接矩阵; //初始化路径矩阵 int N=(WaypointLis

我试图使用Floyd的算法生成一个最快的路线矩阵,通过一个有98个航路点(位于每个迷宫顶点)的迷宫。当算法运行时,它填充两个矩阵-距离矩阵(两个节点之间的最佳距离)和路径矩阵(任意两个节点之间的最佳路径的下一个节点)

距离矩阵用我在前面代码中生成的邻接矩阵初始化。我还生成了一个数据结构,其中包含指向每个航路点的四个可能的相邻航路点的指针,但我没有在生成路径矩阵时使用此数据结构

这是我的c代码:

//初始化距离路径矩阵
距离矩阵=邻接矩阵;
//初始化路径矩阵
int N=(WaypointList.Count);
路径矩阵=新整数[N,N];
对于(int i=0;i当设置路径矩阵[i,j]时,用于(int j=0;j)=k
,您假设这意味着从节点
i
j
的路径将从节点
k
开始。但实际上,这意味着从
i
j
的路径将在某个点通过
k
,不一定是第一步

假设有一条从
i
j
的路径,您需要执行以下操作:

target = j
while there is no edge from i to target:
    target = pathMatrix[i, target]

这将设置
target
到下一个要从
i

转到的节点,这应该放在我的寻路代码中,还是我初始化pathMatrix数组的位置?我的印象是,要找到下一个要移动到的节点以获得最快的路径,您所要做的就是pathMatrix[sourceNode][destinationNode]@MarathonStudios:那么你的印象是错误的。你可以在寻路过程中这样做,或者最好添加一个循环来计算所有对的下一个节点
(i,j)
并在初始化其他矩阵后将其存储在另一个矩阵中。另请参见确认,pathMatrix变量已正确填充到我的原始代码中?据我所知,是的。假设图形是无向的,
distanceMatrix
已正确初始化,并且从
distanceM添加两个无限值atrix
不会导致溢出。@MarathonStudios:我猜您复制的Wikipedia示例只是伪代码。它被假定为返回字符串或顶点索引列表。您的版本返回一个数字,因此它将毫无意义的顶点索引相加。请使用上面的代码,或者使用Wikipedia的代码,但请确保它是conca将列表变长而不是添加数字。
target = j
while there is no edge from i to target:
    target = pathMatrix[i, target]