dfs TLE求助
查看原帖
dfs TLE求助
371364
Biuld楼主2021/7/26 16:04
#include<bits/stdc++.h>
using namespace std;
int n,m,s[1001][1001],b[1001][1001],ans=100000,x,y,a;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,-1,1};
void dfs(int x,int y,int ss,int f,int ff)//x、y是现在的坐标,ss是现在花费的金币数,f是现在的颜色,ff是是否使用过魔法 
{
	if(ss>=ans) return ;
	if(x==n && y==n)
	{
		ans=ss;
		return ;
	}
	for(int i=0;i<4;i++)
	{
		int xx=dx[i]+x;
		int yy=dy[i]+y;//xx、yy是下一步的坐标 
		if(b[xx][yy]==0 && xx>0 && yy>0 && xx<=n && yy<=n)
		{
			b[xx][yy]=1;
			if(s[xx][yy]==f)//如果同色(f不可能为0) 
				dfs(xx,yy,ss,f,0);
			else if(s[xx][yy]!=f && s[xx][yy]!=0)//如果不同且有色 
				dfs(xx,yy,ss+1,s[xx][yy],0);
			else if(s[xx][yy]==0 && ff==0)//如果无色 
			{
					dfs(xx,yy,ss+2,f,1);
			}
			b[xx][yy]=0;
		}
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&a);
		s[x][y]=a+1;//无色是0,红色是1,黄色是2 
	}
	b[1][1]=1;
	dfs(1,1,0,s[1][1],0);
	if(ans==100000) ans=-1;
	printf("%d",ans);
	return 0;
}
2021/7/26 16:04
加载中...