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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【BFS】哈理工OJ-2074-逃生

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BFS】哈理工OJ-2074-逃生 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

逃生
Description
A淪落到了一個迷宮之中,這個迷宮由n*m個格子構成,有些格子是不能通過的,現在他要從迷宮入口(1,1)的格子走到迷宮出口(n,m)的格子。
因為小A的方向感很弱,轉多了會暈,所以他走到目的地的時候,最多能轉z次,否則他就永遠暈倒在原地了,到了出口也沒法出去了。
請你告訴他最少能經過多少個格子走出迷宮。Y(1,1)出發到達的第一個點都可以認為不用轉向。

Input
有多組測試數據。
對于每組測試數據,第一行為3個整數n, mz,表示n*m的迷宮,最多能轉z次。
接下來是n*m的字符矩陣,僅由01表示,0表示可以通過,1表示不可以通過。

2<=n,m<=100 1<=z<=50

Output

對于每組測試數據,輸出一行,包含一個整數,為經過的最少格子數。如果無法到達目的地,輸出-1

Sample Input
2 3 3 011 000 3 2 3 01 11 00 5 5 3 00000 00000 00101 01000 00000
Sample Output
4 -1 9
Source
"科林明倫杯"哈爾濱理工大學第四屆ACM程序設計競賽(預選賽)

解題思路:

BFS,因為有轉向的控制,所以需要朝一個方向不斷去尋找!

想了很久好像懂了。。。。


#include<bits/stdc++.h> using namespace std;struct node {int x,y,step,turn; }; int n,m,t; int dir[4][2]= {{0,1},{0,-1},{-1,0},{1,0}}; char a[105][105]; int book[105][105];int bfs(int x0,int y0,int x1,int y1) {queue<node>q;node fr,ne,fr1;fr.x=x0,fr.y=y0,fr.step=0,fr.turn=-1;q.push(fr);while(!q.empty()){fr=q.front();q.pop();for(int i=0; i<4; i++){ne.x=fr.x+dir[i][0];ne.y=fr.y+dir[i][1];ne.step=fr.step+1;ne.turn=fr.turn+1;while(ne.x>=0&&ne.x<n&&ne.y>=0&&ne.y<m&&book[ne.x][ne.y]==0)//朝一個方向搜到底{if(book[ne.x][ne.y]==0)//某一個點還沒有走過{book[ne.x][ne.y]=1;if(fr.turn+1<=t&&ne.x==x1&&ne.y==y1)return ne.step+1;q.push(ne);}ne.x=ne.x+dir[i][0];ne.y=ne.y+dir[i][1];ne.step+=1;}}}return -1; }int main() {while(~scanf("%d%d%d",&n,&m,&t)){memset(book,0,sizeof(book));for(int i=0; i<n; i++){scanf("%s",&a[i]);for(int j=0; j<m; j++){if(a[i][j]=='1'){book[i][j]=1;}}}int ans=bfs(0,0,n-1,m-1);printf("%d\n",ans);}return 0; }

總結

以上是生活随笔為你收集整理的【BFS】哈理工OJ-2074-逃生的全部內容,希望文章能夠幫你解決所遇到的問題。

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