从一个点出发, 与这个点相连的点都入队,类似于树的层次遍历就好了~
核心代码:
public ShortestPath(Graph graph, int s) {
G = graph;
assert s >= 0 && s < G.V();
visited = new boolean[G.V()];
from = new int[G.V()];
ord = new int[G.V()];
for( int i = 0 ; i < G.V() ; i ++ ){
visited[i] = false;
from[i] = -1;
ord[i] = -1;
}
this.s = s;
// 无向图最短路径算法,从s开始做广度优先遍历整张图
Queue<Integer> q = new LinkedList<Integer>();
q.add(s);
visited[s] = true;
ord[s] = 0;
while(!q.isEmpty()){
int v = q.poll();
for(int i : G.adj(v)){
if(!visited[i]){
q.add(i);
visited[i] = true;
from[i] = v;
ord[i] = ord[v] + 1;
}
}
}
}
其他的都一样~