還是小明找出口的問題,最開始小明在入口(1,1)處,一步可以到達的點有(1,2)和(2,1),如下:
但是出口並不在這兩個點上,那麼小明只能通過(1,2)和(2,1)這兩個點繼續往下走,比如現在小明走到了(1,2)這個點,之後他又能到達那些點呢?有(2,2)再看看通過(2,1)又可以到達哪些點呢?可以到達(2,2)和(3,1),此時也許發現(2,2)這個點既可以從(1,2)到達,也可以從(2,1)到達,並且都只使用了2步,為了防止乙個點多次被走到,這裡需要乙個陣列來記錄乙個點是否已經被走到過。
此時小明2步就可以走到的點就全部走到了,有(2,2)和(3,1),可是小明並不在這兩個點上,沒有別的辦法,還得繼續往下嘗試,在看看通過(2,2)和(3,1)這兩個點還能到達哪些沒有走到過的點。通過(2,2)這個點我們可以到達(2,3)和(3,2),通過(3,1)可以到達(3,2)和(4,1),現在3步可以到達的點有(2,3),(3,2)和(4,1)依舊沒有到達終點,因此重複以上辦法,直到到達終點為止。
見下例:
輸入:5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3
執行結果: 7
樣例說明:輸入第乙個數n表示迷宮的行,m表示迷宮的列,接下來n行m列為迷宮,0表示空地,1表示障礙物,最後一行四個數前兩個表示入口,後兩個表示出口,輸出最短的步長。
# include
# include
# include
using namespace std;
struct node
};int main()
}cin>>begin_x>>begin_y;
cin>>end_x>>end_y;
node *re= node(begin_x,begin_y,0,0,0);
s.push(*re);
while(s.empty()==false),,,};
for(int i=0;i<=3;i++)
}
}
}s.pop();
}cout<
return 0;
}
理解廣度優先搜尋
前段時間遇到了一些與bfs有關的有趣的問題,在一些朋友或者資料的幫助下有所思考,發現這個簡單的演算法如果能應用自如,的確能發揮強大的功效,於是乎寫篇部落格記錄一下。bfs概念很簡單,此處有介紹 bfs實現也很簡單,用乙個queue就可以了 而它確實也是圖中乙個非常重要的演算法,而它確實也可以用來解決...
廣度優先搜尋,簡單bfs
前兩篇文章主要是深度優先搜尋,這次是廣度 寬度 優先搜尋,還是上次的問題現在用bfs來解決,題目 有一天,小哈乙個人去玩迷宮,但是方向感很差的小哈很快就迷路了,小哼得知後,便立即去解救被困的小哈,小哼自然是有備而來,已經弄清楚了迷宮的地圖,現在小哼要以快的速度去解救小哈。問題就此開始了。迷宮由n行和...
廣度優先搜尋BFS(簡單)
都做過倒水的問題,有乙個3公升和5公升的水桶和無限的水,現在要求桶中恰好裝入4公升水。poj3414就是這類的倒水問題,給你兩個桶,容量為a,b。現在要求稱出c公升水。1 a,b 100,c max a,b 並且要使操作次數最少,列印最少次數和操作。操作次數最少,顯然是廣度優先搜尋可以快速達到要求。...