最朴素的dfs,期望40分,实际20分,最后3个点超时,第二个点WA,请问为什么会WA
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int inf=0x3f3f3f3f;
int xx[4]={1,-1,0,0};
int yy[4]={0,0,1,-1};
int ans=inf,fx,fy,sx,sy,n,m;
char z;
int a[510][510];
bool vis[510][510];
void dfs(int x,int y,int sum,int last)
{
if(x==fx&&y==fy)
{
ans=min(ans,sum);
return ;
}
for(int i=0;i<4;i++)
{
int dx=x+xx[i];
int dy=y+yy[i];
if(dx>0&&dx<=n&&dy>0&&dy<=m&&!vis[dx][dy])
{
vis[dx][dy]=1;
if(a[dx][dy]==last)
{
dfs(dx,dy,sum,a[dx][dy]);
vis[dx][dy]=0;
}
else
{
dfs(dx,dy,sum+1,a[dx][dy]);
vis[dx][dy]=0;
}
}
}
}
int main()
{
while(cin>>n>>m)
{
if(n==0&&m==0)
return 0;
memset(vis,0,sizeof(vis));
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf(" %c",&z);
if(z=='#')
a[i][j]=1;
else a[i][j]=2;
}
}
scanf("%d%d%d%d",&sx,&sy,&fx,&fy);
sx++,sy++,fx++,fy++;
vis[sx][sy]=1;
dfs(sx,sy,0,a[sx][sy]);
printf("%d\n",ans);
}
}