hrbust 1181 移動 廣度優先搜尋

2021-08-19 23:14:32 字數 1248 閱讀 2079

移動time limit: 1000 ms

memory limit: 65536 k

total submit: 1375(370 users)

total accepted: 531(350 users)

rating:

special judge: no

description

在平面座標系內,有兩個座標軸x軸和y軸。(x,y)表示點的座標。

有一點處於(x1,y1)位置上,他可以向相臨8個位置移動(移動方式見下圖)。

劃定範圍:此點只可以在[0<=x<=300,0<=y<=300]範圍內移動。

要求:給出起始位置(x1,y1)和目標位置(x2,y2),要求同學求出從起始位置移動到目標位置所需的最少次數。

input

輸入包括多組測試用例。

對於每組測試用例,包含4個正整數,x1,y1,x2,y2,範圍均為[0,300]。

output

輸出移動所需的最少次數。

sample input

0 0 1 2

0 0 2 1

sample output

hint

寬度優先搜尋

author

盧俊達解題思路:放眼望去,本題適用於廣度優先搜尋。廣度優先搜尋,最好用佇列實現。由於它涉及到點的座標問題,所以推薦使用結構體來描述這個點。我們用x[9],,y[9]來表示它的八個方向,每遍歷一遍,都等於其上一次遍歷的步數加一。

題解:

#include///該標頭檔案為萬能標頭檔案,有些學校oj不能使用,讀者可根據需要自行修改

using namespace std;

const int maxn=305;

int vis[maxn][maxn];

int x[9]=;

int y[9]=;

struct point

;queueq;

point xy(int x,int y)

int bfs(point a,point b)

else}}

}}int main()

int ans=bfs(a,b);

printf("%d\n",ans-1);///ans-1是因為在上面的模組裡把(0,0)點的步數記為了1.

}return 0;

}

BFS廣度優先搜素

bfs相對於dfs來說,並不是一條路走到黑,不撞南牆不回頭,而是對於每一層的所有情況都遍歷一次才進入下一層。也就是說bfs更側重於每一層的可能性,而不是每個選擇的可能性。對於二叉樹的遍歷來說,遍歷完一層才會進入下一層。c 中實現方法往往是使用乙個佇列,先將起點元素push進去,然後再去遍歷該元素的子...

hrbust 1174泉水(DFS深度優先搜尋)

搜尋入門題 include dfs深度優先搜尋 include int vis 1056 1012 標記陣列 int high 1007 1024 座標高度,陣列下標代表座標位置,儲存的是座標的高度 int walkx 4 行走的路線,一維陣列儲存x的移動方式 int walky 4 行走的路線,一...

深度優先遍歷 遞迴 深度優先搜尋和廣度優先搜尋

對於搜尋來說,我們絕大多數情況下處理的都是叫 所謂的暴力搜尋 或者是說比較簡單樸素的搜尋,也就是說你在搜尋的時候沒有任何所謂的智慧型的情況在裡面考慮,很多情況下它做的一件事情就是把所有的結點全部遍歷一次,然後找到你要的結果。基於這樣的乙個資料結構,如果這個資料結構本身是沒有任何特點的,也就是說是乙個...