迷宮繞行(BFS)

2021-09-17 21:29:56 字數 1706 閱讀 6816

1767: 迷宮繞行

時間限制: 1 sec 記憶體限制: 128 mb

題目描述

給定乙個m × n (m行, n列)的迷宮,迷宮中有兩個位置,魚頸肥想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,魚頸肥可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,魚頸肥不能走到迷宮外面去。令人頭痛的是,魚頸肥是個沒什麼方向感的人,因此,她在行走過程中,不能轉太多彎了,否則她會暈倒的。我們假定給定的兩個位置都是空地,初始時,魚頸肥所面向的方向未定,她可以選擇4個方向的任何乙個出發,而不算成一次轉彎。魚頸肥能從乙個位置走到另外乙個位置嗎?

輸入第1行為乙個整數t(1≤t≤100),表示測試資料的個數,接下來為t組測資料,

每組第1行為兩個整數m,n(1≤m,n ≤100),表示該位置為障礙,輸入資料中只有這兩種字元,

每組測試資料的最後一行為5個整數k,x 1,y 1,x 2,y 2(1≤ ķ ≤10,1≤x 1,x 2 ≤n,1個≤y 1,y 2 ≤m),

其中ķ表示魚頸肥最多能轉的彎數,(x 1,y 1),(x 2,y 2)表示兩個位置,其中x 1,x 2對應列,y 1,y 2 對應行輸出

每組測試資料對應為一行,若凱萊能從乙個位置走到另外乙個位置,輸出「是」,否則輸出「不」。

樣例輸入

2

5 5...**

*.**.

.....

.....

*....

1 1 1 1 3

5 5...**

*.**.

.....

.....

*....

2 1 1 1 3

樣例輸出

no 

yes

提示

『.』 表示 空地 『*』 表示障礙

**ac_code:

#include

#include

using namespace std;

char a[

105]

[105];

bool vis[

105]

[105];

int dx=

,dy=

;int m,n;

int k;

struct data};

bool check

(int x,

int y)

data s,e;

intbfs()

q.pop();

for(

int i =

0; i <

4; i++

)//入過隊的也可以直接穿過

data t3;

t3.x = t2.x + dx[i]

; t3.y = t2.y + dy[i]

; t2 = t3;}}

}return0;

}int

main()

} cin>>k>>s.y>>s.x>>e.y>>e.x;if(

bfs())

cout<<

"yes"

cout<<

"no"

<}return0;

}

迷宮問題bfs

迷宮問題 採用佇列的廣度優先遍歷 bfs 思想是從乙個頂點v0開始,輻射狀地優先遍歷其周圍較廣的區域 找到的解為最優解 include define m 8 define n 8 define maxsize 1000 typedef struct box typedef struct qutype...

迷宮問題BFS

the code 資料結構迷宮.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include define n 4 定義迷宮為4 4 using namespace std struct pot 為記錄路徑的rec準備,座標 x...

迷宮問題bfs

小明置身於乙個迷宮,請你幫小明找出從起點到終點的最短路程。小明只能向上下左右四個方向移動。輸入包含多組測試資料。輸入的第一行是乙個整數t,表示有t組測試資料。每組輸入的第一行是兩個整數n和m 1 n,m 100 接下來n行,每行輸入m個字元,每個字元表示迷宮中的乙個小方格。字元的含義如下 s 起點 ...