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 257

AtCoder Beginner Contest 154 题解

AtCoder Beginner Contest 228

AtCoder Beginner Contest 103

AtCoder Beginner Contest 115 题解

AtCoder Beginner Contest 242