为何DFS第二个点会错,输出0
查看原帖
为何DFS第二个点会错,输出0
250699
mot1ve楼主2020/6/24 18:57

最朴素的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);
	}
} 
2020/6/24 18:57
加载中...