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