HDU 1728 逃離迷宮

2021-08-14 08:24:33 字數 2351 閱讀 1762

給定乙個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,x 

2對應列,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

首先檢討一下自己:要認真讀題,不要自大,不要中途放棄,不要懷疑自己。不得不說這道題讓我心態奔潰,只是因為我感覺這道題很簡單,然而一次次的wa讓我失去了原有的信心。今天下了大雪,我早上寫的這道題,感覺一發就過了,然而事與願違,我又匆匆改了一下,想快點過了,因為室友喊我去打雪仗,然而我還沒有過,我漸漸的就急了,當時思緒就亂了,一是因為室友催我,二是我不該因為這樣的題而消磨時間,我感覺這就是一種恥辱,我感覺妄為中國人,連這個題就搞不定。可是此時我心態已經炸了,我又交了幾發還不過,然後我就放棄了,出去打了波雪仗。玩完吃過飯,又匆匆來寫這道題,最後在不斷除錯下才發現漏洞百出!(不要問我為什麼有那麼多廢話,我只想說,我要讓自己記憶深刻一點。以後哪怕是一道a+b的題,我也要用心對待,不能小瞧)我以後將認真面對每道題,我不會放棄,我愛學習。下次再這樣,就將十萬噸屎塞隊友嘴裡,就詛咒我今年找不到女朋友,就詛咒室友的孩子沒**,我將會銘記這一天,乙個白色的周四。好了檢討完畢,開始部落格!
第一:要搞清楚座標系。  很多迷宮中的x,y和數學中的座標系都是反的,但是這道題說的很清楚,這一點我注意到了,可最後還是搞混了。
第二:標記陣列, 標記陣列不能用來標記是否走過,而是用來標記走到某點時所用到的轉彎次數,假如v[x][y] = 3,表示經過(x,y)這點最優的轉彎次數是3,如果接下來又有乙個要經過(x,y) 且它的轉彎次數是2,那麼就要更新v[x][y] = 2然後再重新壓入佇列。
第三: 判斷條件,yes的判斷標準是當到達目標點,並且轉彎次數<= k ,而no的判斷標準是沒有yes,所以no只有在整個題圖跑完之後才會出現!
具體**:
#include #include #include #include #include using namespace std;

int m, n;

int k, x1, y1, x2, y2;

int v[105][105];

char map[105][105];

int dr[3][3];//表示方向

int d[4][2] = ;

struct nodepre, nex;

void init()

bool map(int x,int y)

void bfs()

for(int i = 0; i < 4; i++)

}} }

puts("no"); //如果沒有yes 就輸出no

return ;

}int main()

return 0;

}

hdu 1728 逃離迷宮

思路 一開始我是往左和往右走,不轉彎,計數不用加,往上和往下走,就轉彎,計數就加一,進行廣搜,搜到最後那個點,比較就可以啦,但是華麗麗的wa啦。所以改一條路搜到底,走不了啦,就一定要轉彎啦。include include include includeusing namespace std stru...

HDU 1728 逃離迷宮

bfs 搞清楚是轉彎而不是步數。所以需要乙個方向一直走下去直到邊界或者牆。還有就是注意題意。給出起點終點的 x,y 位置是交換的。題目是下標1開始。注意。include include include include include include include include include i...

HDU 1728 逃離迷宮

逃離迷宮 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中...