0
我想用Floyd的算法通过98个路标(位于每个迷宫顶点)的迷宫生成最快路径矩阵。算法运行时,它填充两个矩阵 - 距离矩阵(两个节点之间距离最优的距离)和路径矩阵(下一个节点为任意两个节点之间的最优路径)。用Floyd-Warshall算法寻找迷宫
距离矩阵用在先前的代码中生成的邻接矩阵来初始化。我还生成一个数据结构,其中包含指向每个航点的四个可能的相邻航点的指针,但我没有使用这个数据结构来生成航线矩阵。
这里是我的C#代码:
// Initialize distance path matrix
distanceMatrix = adjacencyMatrix;
// Initialize path matrix
int N = (WaypointList.Count);
pathMatrix = new int[N, N];
for (int i = 0; i < N; i++)
for (int t = 0; t < N; t++)
pathMatrix[i,t] = t;
// Floyd-Warshall algorithm
for (int k = 0; k < N; ++k)
for (int i = 0; i < N; ++i)
for (int j = 0; j <= i; ++j)
{
int currentCombo = distanceMatrix[i, k] + distanceMatrix[k, j];
if (currentCombo < distanceMatrix[i, j])
{
distanceMatrix[j, i] = distanceMatrix[i, j] = currentCombo;
pathMatrix[j, i] = pathMatrix[i, j] = k;
}
}
我相信我错误地计算路径矩阵,因为使用此代码生成的路径矩阵的机器人在大多数情况下,失败(如路径矩阵告诉穿过墙壁等)。
我一直在盯着这段代码几个小时,而且我很难理解我做错了什么。我怎样才能生成正确的路径矩阵用于我的迷宫导航代码?
这是应该在我的寻路代码,或者我初始化我的pathMatrix数组?我的印象是,为了找到下一个节点去寻找最快的路径,你只需要做pathMatrix [sourceNode] [destinationNode] – MarathonStudios
@MarathonStudios:那么你的印象是错误的。您可以在寻路过程中执行此操作,或者最好添加一个循环来计算所有对'(i,j)'的下一个节点,并在初始化其他矩阵后将其存储在另一个矩阵中。另请参阅http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm#Path_reconstruction – interjay
只是为了确认,pathMatrix变量正确填充在我的原始代码中? – MarathonStudios