广搜,WA了2,6,7,8
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,i,j,k,l,x,y,t=1,u[10000000],v[10000000];
cin>>n>>m;
char a[n+1][m+2];
int b[n+1][m+1];
for(i=1;i<=n;i++)
cin>>a[i]+1;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
b[i][j]=0x7fffffff;
b[1][1]=0;
u[0]=1;
v[0]=1;
for(l=0;l<t;l++)
{
x=u[l];
y=v[l];
for(k=1;k+y<=m;k++)
{
if(a[x][y+k]=='X')
break;
if((k&k-1)==0 && b[x][y+k]>b[x][y]+1)
{
b[x][y+k]=b[x][y]+1;
u[t]=x;
v[t]=y+k;
t++;
}
}
x=u[l];
y=v[l];
for(k=1;y-k>=0;k++)
{
if(a[x][y-k]=='X')
break;
if((k&k-1)==0 && b[x][y-k]>b[x][y]+1)
{
b[x][y-k]=b[x][y]+1;
u[t]=x;
v[t]=y-k;
t++;
}
}
x=u[l];
y=v[l];
for(k=1;k+x<=n;k++)
{
if(a[x+k][y]=='X')
break;
if((k&k-1)==0 && b[x+k][y]>b[x][y]+1)
{
b[x+k][y]=b[x][y]+1;
u[t]=x+k;
v[t]=y;
t++;
}
}
x=u[l];
y=v[l];
for(k=1;x-k>=0;k++)
{
if(a[x][x-k]=='X')
break;
if((k&k-1)==0 && b[x-k][y]>b[x][y]+1)
{
b[x-k][y]=b[x][y]+1;
u[t]=x-k;
v[t]=y;
t++;
}
}
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]=='#')
{
if(b[i][j]==0x7fffffff)
cout<<-1;
else
cout<<b[i][j];
return 0;
}
}