無權圖的最短路徑

思路:無權圖的最短路徑也就是要求兩點之間最少幾跳可達,那么我們可以這樣,用廣度遍歷,從起點開始一層層遍歷,如果第一次遍歷到終點,那么肯定是最短路徑。

 
    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
        
		

網(wǎng)友評論