日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu 1728 逃离迷宫 (bfs)

發布時間:2025/7/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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


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, 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。