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
25 5...**
*.**.
.....
.....
*....
1 1 1 1 3
5 5...**
*.**.
.....
.....
*....
2 1 1 1 3
sample output
noyes
題意:輸入t,表示有t組資料,然後輸入m,n,表示迷宮有m行n列,接下來有m行,每行有n個字元,「.」表示空地,「*」表示障礙,最後一行輸入五個數,k表示最多轉彎k次,x1,y1表示起點,x2,y2表示終點,如果可以在k次轉彎內到達終點,則輸出yes,否則輸出no。
分析:這道題是一道bfs的題目,然而考慮的乙個難點是怎麼判斷是轉彎,在這裡我們可以從起點開始取乙個方向,然後在第i(i初始為0)次轉彎的時候將該方向的點都走完,就是在轉一次彎的情況下,可以走到哪些點,然後標記,如果下次走的時候不是標記的點,那麼肯定需要轉彎了。之前做的bfs都是以統計步數,現在是統計轉彎數,一時轉不過來,比較一下步數和轉彎數就可以知道其中的巧妙了~
**:
#include#include#include#include#include#includeusing namespace std;
char str[105][105];
int id[105][105];
int n,m;
int k,x1,y5,x2,y2;
int dir[4][2]=;
int flag;
struct node
;void bfs()
node t3;
t3.x=t2.x+dir[i][0];
t3.y=t2.y+dir[i][1];
t2=t3;}}
}}int main()
}memset(id,0,sizeof(id));
scanf("%d%d%d%d%d",&k,&y5,&x1,&y2,&x2);
flag=false;
bfs();
if(flag==true)
printf("yes\n");
else
printf("no\n");
}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想從迷宮的乙個位置走到另外乙個位置,當然迷宮中...