HDU2612 Find a Way BFS
生活随笔
收集整理的這篇文章主要介紹了
HDU2612 Find a Way BFS
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
yifenfei和merceki要去KFC聚會,給出一個地方的地圖,n*m,有若干個個KFC,然后他們每走一步需要11分鐘(注意:這里時間不能重疊的,比如yi走了一步,me也是走了一步,則一共的時間為2*11,而不是1*11),問他們在哪個KFC聚會所花的時間最少,輸出最少的時間。
這道題我本來是想,枚舉每一個KFC,分別對每一個KFC進行2次BFS,求出去每一個KFC所花的時間。覺得這樣很慢吧。
后來就是,先對yi,求出他到每一個KFC的時間,記錄下來,再對me,求出他到每一個KFC的時間,記錄下來,再選擇哪個好,這樣一共只需要2次BFS就ok了。
ac代碼:
1 #include<cstdio> 2 #include<queue> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 const int maxn=210; 7 int y[maxn][maxn]; 8 int k[maxn][maxn]; 9 char maze[maxn][maxn]; 10 int dx[4]={0,0,-1,1}; 11 int dy[4]={1,-1,0,0}; 12 int n,m; 13 bool vis[maxn][maxn]; 14 struct Point 15 { 16 int x,y,step; 17 }; 18 void bfs(int i,int j,int who) 19 { 20 memset(vis,false,sizeof(vis)); 21 Point s; 22 s.x=i; 23 s.y=j; 24 s.step=0; 25 queue<Point>que; 26 while(!que.empty()) 27 que.pop(); 28 que.push(s); 29 vis[i][j]=true; 30 while(!que.empty()){ 31 Point u=que.front(); 32 que.pop(); 33 if(maze[u.x][u.y]=='@'&&who==1){ 34 y[u.x][u.y]=u.step; 35 } 36 else if(maze[u.x][u.y]=='@'&&who==2){ 37 k[u.x][u.y]=u.step; 38 } 39 for(int i=0;i<4;i++){ 40 Point du; 41 du.x=u.x+dx[i]; 42 du.y=u.y+dy[i]; 43 du.step=u.step+1; 44 if(du.x>=0&&du.x<n&&du.y>=0&&du.y<m&&maze[du.x][du.y]!='#' 45 &&!vis[du.x][du.y]){ 46 que.push(du); 47 vis[du.x][du.y]=true; 48 } 49 } 50 } 51 } 52 int main() 53 { 54 while(scanf("%d%d",&n,&m)!=EOF){ 55 char s[maxn]; 56 for(int i=0;i<n;i++){ 57 scanf("%s",&s); 58 for(int j=0;j<m;j++) 59 maze[i][j]=s[j]; 60 } 61 memset(y,-1,sizeof(y)); 62 memset(k,-1,sizeof(m)); 63 for(int i=0;i<n;i++){ 64 for(int j=0;j<m;j++){ 65 if(maze[i][j]=='Y'){ 66 bfs(i,j,1); 67 } 68 else if(maze[i][j]=='M') 69 bfs(i,j,2); 70 } 71 } 72 int ans=0x3f3f3f3f; 73 for(int i=0;i<n;i++) 74 for(int j=0;j<m;j++){ 75 if(y[i][j]!=-1&&k[i][j]!=-1&&y[i][j]+k[i][j]<ans) 76 ans=y[i][j]+k[i][j]; 77 } 78 printf("%d\n",ans*11); 79 } 80 return 0; 81 } View Code?
轉載于:https://www.cnblogs.com/-maybe/p/4379163.html
總結
以上是生活随笔為你收集整理的HDU2612 Find a Way BFS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 文件大小格式化
- 下一篇: C++设计模式——简单工厂模式