フロイドのアルゴリズムを使用して、98 個のウェイポイント (各迷路の頂点にある) を持つ迷路を通る最速ルート マトリックスを生成しようとしています。アルゴリズムが実行されると、Distance マトリックス (2 つのノード間の最適な距離) と Path マトリックス (任意の 2 つのノード間の最適なパスに移動する次のノード) の 2 つのマトリックスが生成されます。
距離行列は、前のコードで生成した隣接行列で初期化されます。また、ウェイポイントごとに 4 つの可能な近隣ウェイポイントのそれぞれへのポインターを含むデータ構造も生成しますが、パス マトリックスの生成にはこのデータ構造を使用しませんでした。
ここに私の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;
}
}
このコードによって生成されたパス マトリックスを使用するボットは、ほとんどの状況で (パス マトリックスが壁を通過するように指示しているため) 失敗するため、パス マトリックスを正しく計算していないと思います。
私は何時間もこのコードを見つめてきましたが、何が間違っていたのか頭に浮かびません。迷路ナビゲーション コードで使用する正しいパス マトリックスを生成するにはどうすればよいですか?