總結:這類題大部分都能轉化成座標的型設計進行遍歷搜尋,都有套路
題意:已知西洋棋中騎士的走法(具體看原圖)。現給定棋盤大小與起始位置,問乙個騎士從起點走到終點,至少要走幾步。
思路:bfs
。由於問的是最少步數,而且又是棋盤遍歷題,所以優先考慮
bfs。對於乙個點,掃瞄其
8個方向,若該方向上的下乙個點未走過,則將該點入隊,標記。最後就是檢驗一下終點的步數即可。由於是廣度優先,所以第一次找到終點時的步數一定是最小的。
**:
#include
#include
using namespace std;
struct point;
queueq;
int e_x,e_y,l;
int map[400][400];
int dir[8][2]=,,,,,,,};
int main()
return 0; }
int bfs(point s) {
int i;
map[s.x][s.y]=1;
point m,n;
q.push(s);
while(!q.empty()) {
m=q.front();//將前一物件的值傳遞
q.pop();//移除隊首元素
if(m.x==s.x&&m.y==s.y) return m.move;
for(i=0;i<8;i++) {
int x=m.x+dir[i][0];
int y=m.y+dir[i][1];//一次迴圈移動乙個座標
if(x>=0&&x=0&&y
廣搜入門(簡單易懂
這裡需要用到 佇列!題目 農夫要抓牛,農夫可以向前走一步,向後走一步,向前走x步 x為農夫座標 求最短走幾次可以走到牛的座標。模板 1 為了方便,定義乙個結構體,代表當前x 座標 steps 走了多少步 2 建立乙個結構體佇列a,queuea 2 將起點,即農夫座標加入佇列,此時佇列只有乙個元素,編...
廣搜入門(簡單易懂
這裡需要用到 佇列!題目 農夫要抓牛,農夫可以向前走一步,向後走一步,向前走x步 x為農夫座標 求最短走幾次可以走到牛的座標。模板 1 為了方便,定義乙個結構體,代表當前x 座標 steps 走了多少步 2 建立乙個結構體佇列a,queuea 2 將起點,即農夫座標加入佇列,此時佇列只有乙個元素,編...
演算法之路 深搜 廣搜(簡單搜尋)
通過一定的順序,列舉每乙個資料 經常會通過一些判斷條件去掉無意義的資料,即剪枝 找到想要的資料的過程。迷宮 以迷宮為例 如圖,左上角是起點,右下角是終點。如果給我們做,我們可以一眼看出答案,但是電腦卻很難 看 出來,因為電腦一次只能看乙個格。所以就需要乙個乙個格仔去看是否能走,一直找到中間點。如果我...