給定乙個m × n (m行,inputn列)的迷宮,迷宮中有兩個位置,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,outputx 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對應行。
每組測試資料對應為一行,若gloria能從乙個位置走到另外乙個位置,輸出「yes」,否則輸出「no」。基本思路
乙個點到其四個方向所形成的十字上的每乙個點都不需要轉彎,也就是轉彎數相同。當不轉彎的情況走完時,如果還沒到目的地點,那就不得不考慮在某時向四周其中乙個方向轉彎,然後再向其他方向一直直走……
下附**:
#include
#include
#include
#include
int vis[110][110], m, n;/*vis為標記陣列, 走過的點記為1,否則是0;*/
char a[110][110];
int sx, sy, ex, ey;
struct node
q[10010];
int dir[4][2] = ;
bool judge(int
x, int
y)int bfs(int cnt)
tx += dir[i][0];
ty += dir[i][1];}}
head++;/*擴充套件完乙個點後,head往下移一位, 繼續擴充套件下個點*/
}return0;}
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想從迷宮的乙個位置走到另外乙個位置,當然迷宮中...