Atcoder Beginner Contest151D(迷宫问题求任意两点最短路径的最大值,BFS)
Posted ldudxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Atcoder Beginner Contest151D(迷宫问题求任意两点最短路径的最大值,BFS)相关的知识,希望对你有一定的参考价值。
BFS可以求得最短路,DFS会找到从当前点到图中叶子结点的路径。
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 int n,m,ans; 5 char s[25][25]; 6 bool vis[25][25]; 7 struct node{ 8 int x,y,dis; 9 }; 10 int direction[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; 11 void bfs(int x,int y){ 12 if(s[x][y]==‘#‘) 13 return ; 14 memset(vis,0,sizeof(vis)); 15 queue<node>q; 16 q.push((node){x,y,0}); 17 vis[x][y]=1; 18 while(!q.empty()){ 19 node now=q.front(); 20 q.pop(); 21 ans=max(ans,now.dis); 22 for(int i=0;i<4;++i){ 23 int temp_x=now.x+direction[i][0],temp_y=now.y+direction[i][1]; 24 if(temp_x<=0||temp_x>n||temp_y<=0||temp_y>m||s[temp_x][temp_y]==‘#‘||vis[temp_x][temp_y]) 25 continue; 26 q.push((node){temp_x,temp_y,now.dis+1}); 27 vis[temp_x][temp_y]=1; 28 } 29 } 30 } 31 int main(){ 32 ios::sync_with_stdio(false); 33 cin.tie(NULL); 34 cout.tie(NULL); 35 cin>>n>>m; 36 for(int i=1;i<=n;++i) 37 cin>>s[i]+1; 38 for(int i=1;i<=n;++i) 39 for(int j=1;j<=m;++j) 40 bfs(i,j); 41 cout<<ans; 42 return 0; 43 }
以上是关于Atcoder Beginner Contest151D(迷宫问题求任意两点最短路径的最大值,BFS)的主要内容,如果未能解决你的问题,请参考以下文章
AtCoder Beginner Contest 154 题解