NYOJ 題目58 最小步數

2021-07-09 21:11:50 字數 1324 閱讀 8280

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:4 描述

這有乙個迷宮,有0~8行和0~8列:

1,1,1,1,1,1,1,1,1

1,0,0,1,0,0,1,0,1

1,0,0,1,1,0,0,0,1

1,0,1,0,1,1,0,1,1

1,0,0,0,0,1,0,0,1

1,1,0,1,0,1,0,0,1

1,1,0,1,0,1,0,0,1

1,1,0,1,0,0,0,0,1

1,1,1,1,1,1,1,1,1

0表示道路,1表示牆。

現在輸入乙個道路的座標作為起點,再如輸入乙個道路的座標作為終點,問最少走幾步才能從起點到達終點?

(注:一步是指從一座標點走到其上下左右相鄰座標點,如:從(3,1)到(4,1)。)

輸入

第一行輸入乙個整數n(0

輸出輸出最少走幾步。

樣例輸入

2

3 1 5 7

3 1 6 7

樣例輸出

12

11

基本的廣搜。

#include#include#include#includeusing namespace std;

struct node;//加入佇列的結點

queueq;

int map[9][9]=;

int direction[4][2]=;//四個方向

bool visited[9][9];

void init_queue()

}int bfs(int x1,int y1,int x2,int y2);//先建立乙個起點結點,步數設為0

q.push(a);//起點先入佇列

visited[x1][y1]=1;

while(!q.empty());

q.push(aa);//入佇列 }}

} if(q.empty())return 0;//如果隊列為空,即永遠找不到終點

return a.step;

}int main(){

int cases,i,j;

cin>>cases;

int x1,y1,x2,y2;

while(cases--){

cin>>x1>>y1>>x2>>y2;

init_queue();

memset(visited,0,sizeof(visited));

int min_step=bfs(x1,y1,x2,y2);

cout<

nyoj 58 最小步數

兩份 都是我寫的,前後隔了很久.還好沒有忘記bfs的基本思路 圖一表示起點,首先起點入隊,佇列中有 x1,y1 while q.empty 這個迴圈中出隊,圖二檢視出隊的這個點 此時是起點 四個方向,如果沒走過就入隊那麼,現在佇列中就有 x2,y2 x3,y3 然後就一次進行上面的操作 最後就搜尋到...

nyoj 58 最小步數

難度 4 描述 這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1,0,1,0,1,0,0,...

nyoj 58 最小步數

描述 這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1...