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 起點 ...