0
我有一個以矩陣形式表示的迷宮。有一個起點和一個終點。我只能圍繞包含零的單元格移動。我寫了一個可以找到所有可用路徑的函數。但該功能找不到最短路徑。請幫助完成該功能。我無法從迷宮中找到最短路徑(廣度優先搜索)
matrix = [
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 1, 0],
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0]
];
var start = [4,0];
var end = [1,1];
function findWay(position, end)
{
\t var queue = [];
\t var visited = [];
\t matrix[position[0]][position[1]] = 1;
visited.push(position);
\t queue.push(position);
while(queue.length > 0){
\t var pos = queue.shift();
\t \t var direction = [ [ pos[0] + 1, pos[1] ], [ pos[0], pos[1] + 1 ],
\t [ pos[0] - 1, pos[1] ], [ pos[0], pos[1] - 1 ] ];
\t for(var i = 0; i < direction.length; i++){
\t \t if (direction[i][0] < 0 || direction[i][0] >= matrix[0].length) continue;
\t \t if (direction[i][1] < 0 || direction[i][1] >= matrix[0].length) continue;
\t \t if (direction[i][0] == end[0] && direction[i][1] == end[1]) return visited;
\t \t if (matrix[direction[i][0]][direction[i][1]] != 0) continue;
\t \t matrix[direction[i][0]][direction[i][1]] = 1;
\t \t visited.push(direction[i]);
\t \t queue.push(direction[i]);
\t }
}
return visited;
}
findWay(start, end);
如果您可以找到所有路徑,爲什麼不按長度對它們進行排序? – LeBlue
@LeBlue,我沒有完全正確地說出來。該函數找到它可以輸入和寫入數組的所有點。我只需要寫入通向數組中端點的點。 – katty
@katty請給出更多細節。在你的例子中,期望的輸出是什麼?你的方法是什麼,即描述你的算法?你遇到了什麼問題? – Flatfoot