無(wú)權(quán)圖的最短路徑

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

 
    public static void findPath(int start,int end)
    {        //創(chuàng)建一個(gè)隊(duì)列來(lái)存儲(chǔ)
        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;            //如果結(jié)束點(diǎn)已經(jīng)訪問(wèn) 跳出循環(huán)
            if(isVisit[end])                break;            //如果他的鄰節(jié)點(diǎn)都訪問(wèn)或者沒有鄰節(jié)點(diǎn) 跳出循環(huán)
            while(bnode!=null)
            {                //如果鄰節(jié)點(diǎn)還沒被訪問(wèn)訪記錄他的上一節(jié)點(diǎn),否則不進(jìn)行記錄。這樣的話即使到了下一跳有這個(gè)頂點(diǎn),記錄的也是更的短路徑,比如說(shuō)起點(diǎn)A 鄰節(jié)點(diǎn)有BCD B的鄰節(jié)點(diǎn)是C,此時(shí)遍歷A的鄰節(jié)點(diǎn)C的時(shí)候,就記錄C的上一節(jié)點(diǎn)是A,下次遍歷B的領(lǐng)節(jié)點(diǎn),因?yàn)镃已經(jīng)被訪問(wèn),所以C記錄的上一節(jié)點(diǎn)還是A,這樣就保證了最短路徑。
                if(!isVisit[bnode.index])
                {&nb