逃離迷宮(bfs)

2021-10-22 10:26:47 字數 2725 閱讀 6019

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表示是陷阱,進去了就出不來。現在的問題是 求挑戰者從入口到出口所需的最短時...