廣搜的簡單應用1015

2021-07-11 05:44:07 字數 876 閱讀 2981

總結:這類題大部分都能轉化成座標的型設計進行遍歷搜尋,都有套路

題意:已知西洋棋中騎士的走法(具體看原圖)。現給定棋盤大小與起始位置,問乙個騎士從起點走到終點,至少要走幾步。

思路: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 將起點,即農夫座標加入佇列,此時佇列只有乙個元素,編...

演算法之路 深搜 廣搜(簡單搜尋)

通過一定的順序,列舉每乙個資料 經常會通過一些判斷條件去掉無意義的資料,即剪枝 找到想要的資料的過程。迷宮 以迷宮為例 如圖,左上角是起點,右下角是終點。如果給我們做,我們可以一眼看出答案,但是電腦卻很難 看 出來,因為電腦一次只能看乙個格。所以就需要乙個乙個格仔去看是否能走,一直找到中間點。如果我...