HDU1728 逃離迷宮 BFS

2021-06-14 17:55:57 字數 1742 閱讀 7932

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, x

1, y

1, x

2, y

2  (1 ≤ k ≤ 10, 1 ≤ x

1, x

2  ≤ n, 1 ≤ y

1, y

2  ≤ m),其中k表示gloria最多能轉的彎數,(x

1, y

1), (x

2, y

2)表示兩個位置,其中x

1,x2對應列,y

1, y

2對應行。

output

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

sample input

2

5 5...**

*.**.

.....

.....

*....

1 1 1 1 3

5 5...**

*.**.

.....

.....

*....

2 1 1 1 3

sample output

no

yes

這道題我必須嚴重的吐槽下

之前是用dfs做的,然後果斷就超時了

再用bfs做,但是無論如何樣例都過不了,我就鬱悶了

找了兩個多小時,最後看人家**才驚訝的發現,原來題目中的x是代表列,y是代表行!

我擦!以後得把題目看清楚了t_t

#include #include #include using namespace std;

int n,m,x1,y1,x2,y2,k;

int map[105][105],ans;

int to[4][2] = ;

struct node

;int check(int x,int y)

int bfs()

next.x+=to[i][0];

next.y+=to[i][1];

flag = check(next.x,next.y);}}

}return -1;

}int main()

{ int t;

char s[105];

scanf("%d",&t);

while(t--)

{scanf("%d%d",&n,&m);

int i,j;

for(i = 0; i

hdu1728 逃離迷宮 bfs

解題思路 乙個方向搜到底,那麼每次搜過的點肯定都是用轉彎次數最少的路徑走到的 hdu1728 2014 07 10 20 03 49 accepted 1728 46ms 372k 2360 b g bfs 乙個方向搜到底,那麼每次搜過的點肯定都是用轉彎次數最少的路徑走到的 include incl...

HDU 1728 逃離迷宮 BFS

題目傳送門 典型的廣搜題,但是有坑,在某個方向走的時候要一直走到頭,不然的話可能會出現多轉彎的情況,主要就是保證從起始點到某一點的轉彎次數是最小的 ac include include include include include include include include include i...

HDU 1728 逃離迷宮 BFS

題意 給乙個圖。規定至多轉彎的次數,起點和終點。問在轉彎的次數內能否到達終點。注意!給的n m的map,n是列,m是行。同乙個點可能經過多次。由於只統計拐彎次數,會出現走的步數少但拐彎多的情況。1 include 2 include 3 include 4 include 5 include 6 u...