60分,TLE求助
查看原帖
60分,TLE求助
390937
不易之论楼主2022/4/9 11:26
#include<cstdio>
const int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
int m,n,a[101][101],ans=0x7f7f7f7f;
bool p[101][101];
void dfs(int x,int y,int k,int t)
{
	if(k>ans)	return ;
	if(x==m&&y==m)
	{
		ans=k;
		return ;
	}
	for(int i=0;i<4;i++)
	{
		if(p[x+dx[i]][y+dy[i]]==0&&x+dx[i]>0&&x+dx[i]<=m&&y+dy[i]>0&&y+dy[i]<=m)
		{
			if(a[x+dx[i]][y+dy[i]]==-1&&t==1)
			{
				p[x+dx[i]][y+dy[i]]=1;
				a[x+dx[i]][y+dy[i]]=a[x][y];
				dfs(x+dx[i],y+dy[i],k+2,0);
				a[x+dx[i]][y+dy[i]]=-1;
				p[x+dx[i]][y+dy[i]]=0;
			}
			if(a[x+dx[i]][y+dy[i]]!=-1)
			{
				if(a[x][y]==a[x+dx[i]][y+dy[i]])
				{
					p[x+dx[i]][y+dy[i]]=1;
					dfs(x+dx[i],y+dy[i],k,1);
					p[x+dx[i]][y+dy[i]]=0;
				}
				else
				{
					p[x+dx[i]][y+dy[i]]=1;
					dfs(x+dx[i],y+dy[i],k+1,1);
					p[x+dx[i]][y+dy[i]]=0;
				}
			}
		}
	}
	return ;
}
int main()
{
//	freopen("chess.in","r",stdin);
//	freopen("chess.out","w",stdout);
	scanf("%d%d",&m,&n);
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=m;j++)
		{
			a[i][j]=-1;
		}
	}
	for(int i=1;i<=n;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		scanf("%d",&a[x][y]);
	}
	dfs(1,1,0,1);
	if(ans==0x7f7f7f7f)	printf("-1\n");
	else	printf("%d\n",ans);
	return 0;
}

TLE求调谢谢

2022/4/9 11:26
加载中...