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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【HDU - 2612】Find a way(bfs)

發布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【HDU - 2612】Find a way(bfs) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

-->Find a way

直接上Chinese

?Descriptions:

hsj和lsh最近迷上了pokemon go的游戲。在雙十一大物期中考試來臨之前,他們想抓一只稀有土撥鼠來攢攢人品(因為土撥鼠的刷新地點最近來到了哈工程)
但是由于土撥鼠過于強大,他的雷霆半月斬以及驚天浪濤沙都可以輕松的將他們兩擊敗,但是他們兩的合擊必殺技流影電光閃以及天羽屠鼠舞可以將土撥鼠打至昏迷狀態,并可將其捕獲。
但是因為這是款按時間付費的游戲,他們需要盡快捕捉到土撥鼠(即他們兩到土撥鼠的時間之和需要最少),因此他們找到了你來幫他們解決這個問題。 規定每走一步需要花費11分鐘。

Input

輸入存在多組(需使用!=EOF)
每組的第一行有兩個整數n,m(2<=n,m<=200)
接下來n行,每行包括m個字符
‘Y’表示hsj所在的位置
‘M’表示lsh所在的位置
‘.’表示可以通過的地方
‘#’表示教學樓即不能走的地方
‘@’表示稀有土撥鼠刷新的地方(地圖中存在多只稀有土撥鼠)
Output

對于每組樣例輸出他們到達土撥鼠刷新點的最小時間總和。
保證每組樣例都存在一個土撥鼠刷新點,他們兩都能到達?
Sample Input

4 4 Y.#@ .... .#.. @..M 4 4 Y.#@ .... .#.. @#.M 5 5 Y..@. .#... .#... @..M. #...#

Sample Output

66 88 66

題目鏈接:

https://vjudge.net/problem/HDU-2612

這可以說是一題兩個bfs

分別求出Y、M在這張地圖所有地方的所用時間,再求出在"@"地方的時間的最小值即可

具體操作看代碼

AC代碼

#include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cmath> #include <deque> #include <vector> #include <queue> #include <string> #include <cstring> #include <map> #include <stack> #include <set> #include <sstream> #define mod 1000000007 #define eps 1e-6 #define ll long long #define INF 0x3f3f3f3f #define MEM(x,y) memset(x,y,sizeof(x)) using namespace std; int T,n,m; char mp[1005][1005];//原始地圖 int vis[1005][1005];//記錄人是否走過 int ytime[1005][1005];//Y 經過這個地方的時間 int mtime[1005][1005];//M 經過這個地方的時間 int dt[][2]= {{1,0},{-1,0},{0,1},{0,-1}};//四個方向 struct node {int x,y;//坐標 }; node now,net; node Y,M; void bfs(int f)// {queue<node>q;MEM(vis,0);//都要初始化,都沒走過,設為0if(f==0)// Y的情況 {MEM(ytime,INF);q.push(Y);vis[Y.x][Y.y]=1;ytime[Y.x][Y.y]=0;}if(f==1)// M的情況 {MEM(mtime,INF);q.push(M);vis[M.x][M.y]=1;mtime[M.x][M.y]=0;}while(!q.empty())// bfs 一樣的套路 {now=q.front();q.pop();for(int i=0; i<4; i++)//四個方向 {net.x=now.x+dt[i][0];net.y=now.y+dt[i][1];if(net.x>=0&&net.x<n&&net.y>=0&&net.y<m&&!vis[net.x][net.y]&&mp[net.x][net.y]!='#')//滿足條件 {q.push(net);//入隊vis[net.x][net.y]=1;//走過了if(f==0)//Y 的路線時間ytime[net.x][net.y]=ytime[now.x][now.y]+1;if(f==1)//M 的路線時間mtime[net.x][net.y]=mtime[now.x][now.y]+1;}}} } int main() {while(cin>>n>>m){for(int i=0; i<n; i++){for(int j=0; j<m; j++){cin>>mp[i][j];if(mp[i][j]=='Y'){Y.x=i;Y.y=j;}if(mp[i][j]=='M'){M.x=i;M.y=j;}}}bfs(0); //Y的路線bfs(1); //M的路線int ans=INF; //最小步數for(int i=0; i <n; i++)//搜一遍地圖,看一下"@"所在地方的時間之和,取最小值for(int j=0; j<m; j++)if(mp[i][j]=='@')ans=min(ans,ytime[i][j]+mtime[i][j]);cout<<11*ans<<endl;}return 0; }

?

轉載于:https://www.cnblogs.com/sky-stars/p/11140928.html

總結

以上是生活随笔為你收集整理的【HDU - 2612】Find a way(bfs)的全部內容,希望文章能夠幫你解決所遇到的問題。

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