problem description
給定乙個m × n (m行, n列)的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,gloria是個沒什麼方向感的人,因此,她在行走過程中,不能轉太多彎了,否則她會暈倒的。我們假定給定的兩個位置都是空地,初始時,gloria所面向的方向未定,她可以選擇4個方向的任何乙個出發,而不算成一次轉彎。gloria能從乙個位置走到另外乙個位置嗎?
input
第1行為乙個整數t (1 ≤ t ≤ 100),表示測試資料的個數,接下來為t組測試資料,每組測試資料中,
第1行為兩個整數m, n (1 ≤ m, n ≤ 100),分別表示迷宮的行數和列數,接下來m行,每行包括n個字元,其中字元』.『表示該位置為空地,字元』*'表示該位置為障礙,輸入資料中只有這兩種字元,每組測試資料的最後一行為5個整數k, x1, y1, x2, y2 (1 ≤ k ≤ 10, 1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m),其中k表示gloria最多能轉的彎數,(x1, y1), (x2, y2)表示兩個位置,其中x1,x2對應列,y1, y2對應行。
output
每組測試資料對應為一行,若gloria能從乙個位置走到另外乙個位置,輸出「yes」,否則輸出「no」。
sample input
25 5
…***..……
…1 1 1 1 3
5 5…
*.*.……
*…2 1 1 1 3
sample output
noyes
題目大意:給定起點與終點,要求走到終點轉彎的次數不能超過指定次數,第一次不算。
要注意的點:輸入x1,y2,x2,y2時,x1代表的是列,y1代表的是行!
用深搜超時,改用廣搜。剛開始的廣搜是打算再結構體中定義兩個座標變數,轉彎的次數,以及乙個記錄轉彎方向的變數,想著每遍歷乙個點,判斷當前走的方向與上次的方向相不相同,不相同就加一。但是好像過不了。找到一篇部落格說了原因:鏈結 參考其他題解,幾乎都是每次就往乙個方向走到底,然後把遍歷的點入佇列,在遍歷同乙個方向的不同點時,其轉彎的次數等於剛轉到這個方向時轉彎的次數。即碰到乙個沒有遍歷的點,轉彎的次數等於這個方向起點的轉彎次數加一。可以參考下面的思路,取自
*思路: 一條路到底,一直走乙個方向下去,並把該方向上可以訪問的點壓入佇列
* 然後每個方向都是如此
* 例 (x1,y1)=(0,0) -->a (x2,y2)=(0,2) -->b
* step1 a_-1 ._0 ._0 *_ *_
* *_ ._ *_ *_ ._
* b_ ._ ._ ._ ._
* ._ ._ ._ ._ ._
* *_ ._ ._ ._ ._
*
* step2 a_-1 ._0 ._0 *_ *_
* *_ ._1 *_ *_ ._
* b_ ._1 ._ ._ ._
* ._ ._1 ._ ._ ._
* *_ ._1 ._ ._ ._
*
* step3 a_-1 ._0 ._0 *_ *_
* *_ ._1 *_ *_ ._3
* b_2 ._1 ._2 ._2 ._2
* ._2 ._1 ._2 ._2 ._2
* *_ ._1 ._2 ._2 ._2
#include
#include
#include
#include
#include
using
namespace std;
//給定起點與終點,要求走到終點轉彎不能超過指定次數
int mov[4]
[2]=
;int t,m,n,x1,x2,y1,y2,k;
110]
[110];
int vis[
110]
[110];
struct node
;bool
judge
(int x,
int y)
bool
bfs(
)//往乙個方向走時 1.
temp.x = next.x+mov[i][0
];temp.y = next.y+mov[i][1
];next = temp;
//只改變座標,不改變轉彎次數。 2.}}
}return
false;}
intmain()
scanf
("%d%d%d%d%d"
,&k,
&y1,
&x1,
&y2,
&x2)
;memset
(vis,0,
sizeof
(vis));
if(bfs())
printf
("yes\n");
else
printf
("no\n");
}return0;
}/*int dfs(int x,int y,int s)
*/
逃離迷宮(BFS)
problem description 給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能...
hdu 逃離迷宮 BFS
給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...
逃離ACM迷宮(BFS)
題目鏈結 題目描述 如下圖所示的是乙個由程式設計題目組成的acm迷宮。迷宮的左上角是入口,右下角是出口。迷宮中每乙個格仔都有乙個程式設計題目,挑戰者要ac該題目後才能通過,大於0的數字表示ac該題目所需的最短時間。數字如果是0表示是陷阱,進去了就出不來。現在的問題是 求挑戰者從入口到出口所需的最短時...