我有一個圖表示爲鄰接矩陣,我想找到兩個節點之間的最短路徑。該圖是加權的。我想使用BFS算法,我嘗試了但我用完了想法。這是我的代碼,如果你能幫助我。找到2個節點之間的最短路徑沒有更多的想法
public class A {
private static int[][] adjacency = new int [4][4];
static int n = 4;
public static void main(String[] args) {
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
adjacency[i][j] = 0;
adjacency[0][1] = 2;
adjacency[0][3] = 1;
adjacency[1][0] = 2;
adjacency[1][2] = 5;
adjacency[2][1] = 5;
adjacency[2][3] = 1;
adjacency[2][4] = 2;
adjacency[3][0] = 1;
adjacency[3][2] = 1;
adjacency[4][2] = 2;
}
public List<Integer> getNeighbors(int node, int[][] a) {
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<n;i++)
if (a[node][i] != 0)
list.add(i);
return list;
}
public List<Queue<Integer>> findPath(int start, int end, int[][] a) {
List<Queue<Integer>> paths = new ArrayList<Queue<Integer>>();
Queue<Integer> toVisit = new LinkedList<Integer>();
Queue<Integer> visited = new LinkedList<Integer>();
toVisit.add(start);
while(!toVisit.isEmpty()) {
int node = toVisit.remove();
visited.add(node);
List<Integer> neighbors = new ArrayList<Integer>();
neighbors = this.getNeighbors(node,a);
}
return paths;
}
}
所以基本上我在想是要找到所有的2個給出節點之間的路徑,並將其存儲在隊列的列表,然後檢查其路徑具有最短距離。你能幫我麼。
BFS爲等權在所有鏈路的最短路徑算法,都是你的鏈接相同的權重? – Alejandro
http://en.wikipedia.org/wiki/Shortest_path_problem你讀過那裏嗎?我記得Dijkstra和A *非常有效,雖然效率不高。 –
@ RB-Develop,我不認爲他們被認爲是尋找最短路徑的「低效率」。如果你將BFS與Dijkstra/A *進行比較,那麼蘋果就不是蘋果。 – Alejandro