無權圖的最短路徑
思路:無權圖的最短路徑也就是要求兩點之間最少幾跳可達,那么我們可以這樣,用廣度遍歷,從起點開始一層層遍歷,如果第一次遍歷到終點,那么肯定是最短路徑。
public static void findPath(int start,int end) { //創(chuàng)建一個隊列來存儲 LinkedList< VNode> queue=new LinkedList<VNode>(); queue.offer(nodes[start]); while(!queue.isEmpty()) { VNode vnode=queue.peek(); isVisit[vnode.index]=true; BNode bnode=vnode.bnode; //如果結束點已經(jīng)訪問 跳出循環(huán) if(isVisit[end]) break; //如果他的鄰節(jié)點都訪問或者沒有鄰節(jié)點 跳出循環(huán) while(bnode!=null) { //如果鄰節(jié)點還沒被訪問訪記錄他的上一節(jié)點,否則不進行記錄。這樣的話即使到了下一跳有這個頂點,記錄的也是更的短路徑,比如說起點A 鄰節(jié)點有BCD B的鄰節(jié)點是C,此時遍歷A的鄰節(jié)點C的時候,就記錄C的上一節(jié)點是A,下次遍歷B的領節(jié)點,因為C已經(jīng)被訪問,所以C記錄的上一節(jié)點還是A,這樣就保證了最短路徑。 if(!isVisit[bnode.index]) {&nb