hdu 1728 逃离迷宫 (bfs)
生活随笔
收集整理的這篇文章主要介紹了
hdu 1728 逃离迷宫 (bfs)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
逃離迷宮
Time Limit: 1000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12910????Accepted Submission(s): 3090
?
Input 第1行為一個整數t (1 ≤ t ≤ 100),表示測試數據的個數,接下來為t組測試數據,每組測試數據中,第1行為兩個整數m, n (1 ≤ m, n ≤ 100),分別表示迷宮的行數和列數,接下來m行,每行包括n個字符,其中字符'.'表示該位置為空地,字符'*'表示該位置為障礙,輸入數據中只有這兩種字符,每組測試數據的最后一行為5個整數k, x1, y1, x2, y2?(1 ≤ k ≤ 10, 1 ≤ x1, x2?≤ n, 1 ≤ y1, y2?≤ m),其中k表示gloria最多能轉的彎數,(x1, y1), (x2, y2)表示兩個位置,其中x1,x2對應列,y1, y2對應行。
?
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?
Source “網新恩普杯”杭州電子科技大學程序設計邀請賽?
Recommend lcy???|???We have carefully selected several similar problems for you:??1175?1072?1026?1180?1254??
1 //31MS 420K 1366 B G++ 2 /* 3 4 題意: 5 是否在轉n個彎內重一點到達另一點。 6 7 bfs: 8 WA了n次,主要是考慮策略時想法錯了。 9 其實每到一個點時就應該把改點以及該方向的點全都遍歷一次,這樣才能保證 10 到達改點時是最優策略,其次,因為交叉關系,vis[][]應該放在while判斷里面。 11 12 */ 13 #include<stdio.h> 14 #include<string.h> 15 #include<iostream> 16 #include<algorithm> 17 #include<queue> 18 #define N 105 19 using namespace std; 20 struct node{ 21 int x,y; 22 int step; 23 }; 24 char g[N][N]; 25 int vis[N][N]; 26 int mov[4][2]={0,1,1,0,0,-1,-1,0}; 27 int k,x1,x2,y1,y2; 28 int n,m; 29 int bfs() 30 { 31 queue<node>Q; 32 node t={x1,y1,-1}; 33 Q.push(t); 34 vis[x1][y1]=1; 35 while(!Q.empty()){ 36 t=Q.front(); 37 Q.pop(); 38 //printf("%d %d %d\n",t.x,t.y,t.step); 39 if(t.x==x2 && t.y==y2 && t.step<=k) return 1; 40 t.step; 41 for(int i=0;i<4;i++){ 42 node tt=t; 43 tt.step++; 44 tt.x+=mov[i][0]; 45 tt.y+=mov[i][1]; 46 while(tt.x>0 && tt.x<=n && tt.y>0 & tt.y<=m && g[tt.x][tt.y]!='*' ){ 47 if(!vis[tt.x][tt.y]){ 48 vis[tt.x][tt.y]=1; 49 Q.push(tt); 50 } 51 tt.x+=mov[i][0]; 52 tt.y+=mov[i][1]; 53 } 54 } 55 } 56 return 0; 57 } 58 int main(void) 59 { 60 int t; 61 scanf("%d",&t); 62 while(t--) 63 { 64 memset(vis,0,sizeof(vis)); 65 scanf("%d%d",&n,&m); 66 for(int i=1;i<=n;i++) 67 scanf("%s",g[i]+1); 68 scanf("%d%d%d%d%d",&k,&y1,&x1,&y2,&x2); 69 if(bfs()) puts("yes"); 70 else puts("no"); 71 } 72 return 0; 73 }?
轉載于:https://www.cnblogs.com/GO-NO-1/p/3601163.html
總結
以上是生活随笔為你收集整理的hdu 1728 逃离迷宫 (bfs)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nagios使用check_mysql监
- 下一篇: 变更AD计算机名称和IP地址