RT,代码贴这了。
原帖
#include<stdio.h>
#include<string.h>
#include<queue>
int n,m,stx,sty,edx,edy,x,y,t,ans;
char mp[222][222],vis[222][222];
int p[222][222];int mxxz=0;
std::queue<int>nx,ny,nt;
void bfs(int X,int Y,int XX,int YY,int T){
nx.push(X),ny.push(Y),nt.push(T);
nx.push(XX),ny.push(YY),nt.push(T);
while(!nx.empty()){
x=nx.front(),y=ny.front(),t=nt.front();
mxxz=(mxxz>nx.size()?mxxz:nx.size());
//printf("x=%d,y=%d,t=%d\n",x,y,t);
nx.pop(),ny.pop(),nt.pop();
vis[x][y]=1;p[x][y]>t?p[x][y]=t:0;
if(x+2<n&&!vis[x+2][y]&&mp[x+1][y]==32)
nx.push(x+2),ny.push(y),nt.push(t+1);
if(y+2<m&&!vis[x][y+2]&&mp[x][y+1]==32)
nx.push(x),ny.push(y+2),nt.push(t+1);
if(x>2&&!vis[x-2][y]&&mp[x-1][y]==32)
nx.push(x-2),ny.push(y),nt.push(t+1);
if(y>2&&!vis[x][y-2]&&mp[x][y-1]==32)
nx.push(x),ny.push(y-2),nt.push(t+1);
}
}
int main(){
//freopen("P1519_2.in","r",stdin);
scanf("%d%d",&n,&m);
n=n<<1|1,m=m<<1|1;n^=m^=n^=m;
//getchar();
//printf("n=%d,m=%d\n",n,m);
for(int i=1;i<=n;++i){
getchar();
for(int j=1;j<=m;++j)
mp[i][j]=getchar();
}
//for(int i=1;i<=n;++i)printf("%s\n",mp[i]+1);
for(int i=2;i<m;i+=2)
if(mp[1][i]==32&&!stx)stx=2,sty=i;
else if(mp[1][i]==32)edx=2,edy=i;
for(int i=2;i<m;i+=2)
if(mp[n][i]==32&&!stx)stx=n-1,sty=i;
else if(mp[n][i]==32)edx=n-1,edy=i;
for(int i=2;i<n;i+=2)
if(mp[i][1]==32&&!stx)stx=i,sty=2;
else if(mp[i][1]==32)edx=i,edy=2;
for(int i=2;i<n;i+=2)
if(mp[i][m]==32&&!stx)stx=i,sty=m-1;
else if(mp[i][m]==32)edx=i,edy=m-1;
//printf("%d %d %d %d\n",stx,sty,edx,edy);
memset(p,0x72,sizeof p);
bfs(stx,sty,edx,edy,1);
//memset(vis,0,sizeof vis);
//bfs(1);
for(int i=2;i<n;i+=2)
for(int j=2;j<m;j+=2)
ans<p[i][j]&&p[i][j]!=0x72727272?ans=p[i][j]:0;
// for(int i=1;i<=n;++i,puts(""))
// for(int j=1;j<=m;++j){
// if((i|j)&1)putchar(mp[i][j]);
// else printf("%d",p[i][j]>9?0:p[i][j]);
// }
printf("%d",ans);
return 0;
}