题面:

样例:
3 3
...
...
...
4
3 5
...#.
.#.#.
.#...
10
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
string a[22];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
bool vis[22][22];
int bfs(int sx,int sy,int ex,int ey){
memset(vis,0,sizeof(vis));
queue<tuple<int,int,int>> q;
while(!q.empty()) q.pop();
q.push({sx,sy,0});
vis[sx][sy]=1;
while(!q.empty()){
auto [x,y,c]=q.front();
q.pop();
if(x==ex&&y==ey) return c;
for(int i=0;i<4;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(xx<0||xx>=n||yy<0||yy>=m) continue;
if(vis[xx][yy]) continue;
if(a[xx][yy]=='#') continue;
vis[xx][yy]=1;
q.push({xx,yy,c+1});
}
}
return -1;
}
int ans=0;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int _x1_=0;_x1_<n;_x1_++){
for(int _y1_=0;_y1_<m;_y1_++){
for(int _x2_=0;_x2_<n;_x2_++){
for(int _y2_=0;_y2_<m;_y2_++){
if(a[_x2_][_y2_]=='#'||(_x1_==_x2_&&_y1_==_y2_)) continue;
ans=max(ans,bfs(_x1_,_y1_,_x2_,_y2_));
}
}
}
}
cout<<ans;
return 0;
}
wa80分,样例全过