原题
#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<cctype>
#define inf 0x3f3f3f3f
using namespace std;
const int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
queue<int> qx,qy;
char ch[1010][1010];
int d[1010][1010],n,m,ans;
bool judge(int x,int y,int order) {
switch(order) {
case 0: {return ch[x*2+1][y*2]==' ';break;}
case 1: {return ch[x*2][y*2+1]==' ';break;}
case 2: {return ch[x*2-1][y*2]==' ';break;}
case 3: {return ch[x*2][y*2-1]==' ';break;}
}
}
void bfs(int p,int q) {
qx.push(p);qy.push(q);d[p][q]=1;
while(!qx.empty()) {
int x=qx.front(),y=qy.front();qx.pop();qy.pop();
for (int k=0;k<4;k++) {
int i=x+dx[k],j=y+dy[k];
if (x<1||x>n||y<1||y>m) continue;
if (judge(x,y,k)&&d[x][y]+1<d[i][j]) {
qx.push(i);qy.push(j);
d[i][j]=d[x][y]+1;
}
}
}
}
int main() {
scanf("%d%d",&m,&n);getchar();getchar();//在luogu上是\r\n
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++) d[i][j]=inf;
for (int i=1;i<=2*n+1;i++) {
for (int j=1;j<=2*m+1;j++) ch[i][j]=getchar();
getchar();getchar();
}
for (int i=1;i<=2*n+1;i++)
for (int j=1;j<=2*m+1;j++) {
if (i==2*n+1&&ch[i][j]==' ') bfs(n,(j+1)/2);
if (i==1&&ch[i][j]==' ') bfs(1,(j+1)/2);
if (j==2*m+1&&ch[i][j]==' ') bfs((i+1)/2,m);
if (j==1&&ch[i][j]==' ') bfs((i+1)/2,1);
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++) ans=max(ans,d[i][j]);
printf("%d\n",ans);
return 0;
}