hdu 逃離迷宮 BFS

2021-08-04 02:04:16 字數 1861 閱讀 9761

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

第1行為乙個整數t (1 ≤ t ≤ 100),表示測試資料的個數,接下來為t組測試資料,每組測試資料中,   第1行為兩個整數m, n (1 ≤ m, n ≤ 100),分別表示迷宮的行數和列數,接下來m行,每行包括n個字元,其中字元』.』表示該位置為空地,字元』*』表示該位置為障礙,輸入資料中只有這兩種字元,每組測試資料的最後一行為5個整數k, x[sub]1[/sub], y[sub]1[/sub], x[sub]2[/sub], y[sub]2[/sub] (1 ≤ k ≤ 10, 1 ≤ x[sub]1[/sub], x[sub]2[/sub] ≤ n, 1 ≤ y[sub]1[/sub], y[sub]2[/sub] ≤ m),其中k表示gloria最多能轉的彎數,(x[sub]1[/sub], y[sub]1[/sub]), (x[sub]2[/sub], y[sub]2[/sub])表示兩個位置,其中x[sub]1[/sub],x[sub]2[/sub]對應列,y[sub]1[/sub], y[sub]2[/sub]對應行。

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

2 5 5

…**

.*.

…..

…..

*….

1 1 1 1 3

5 5

…**

.*.

…..

…..

*….

2 1 1 1 3

no yes

對於求某某最小,顯然用bfs。

思路:給你兩個座標,你計算兩者連通的路途中有幾個轉彎點。

答案錯誤了n遍,很多問題沒有考慮清楚,比如說重複走過的地方轉彎數不一定多,能沿乙個方向的就一次走完。

縮小時間複雜度的方法:vis陣列定義為當前點最小轉彎數量,當前點最小轉彎量大於題設k,直接跳過。

主要是要過這組樣列

5 5

…..

...

…..

...

…..

1 1 1 3 4

輸出是yes

#include 

#include

#include

using namespace std

;struct node

que[10100],st,go;

int n,m;

int dir[4][2]=,,,};

char map[105][105];

int vis[105][105];

bool bfs()

q.x+=dir[i][0];

q.y+=dir[i][1];}}

}return false;

}int main()

scanf("%d%d%d%d%d",&go.turn,&st

.x,&st

.y,&go.x,&go.y);

if(bfs()) printf("yes\n");

else printf("no\n");

}return 0

;}

HDU1728 逃離迷宮 BFS

problem description 給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能...

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