65分,TLE求助!!!(深搜)
查看原帖
65分,TLE求助!!!(深搜)
475143
gaojian2007楼主2021/8/30 17:02
#include<iostream>
using namespace std;
int m,n,a[105][105],mins=100000000,s,b[105][105];
int dx[5]={0,-1,1,0,0},dy[5]={0,0,0,-1,1};
void dfs(int x,int y,int z)
{
	if(mins<=s)return ;
	if(x==m&&y==m)
	{
		mins=min(mins,s);
		return ;
	}
	for(int i=1;i<=4;i++)
	{
		int nx=x+dx[i],ny=y+dy[i];
		if(nx<1||nx>m||ny<1||ny>m||b[nx][ny]==1||(z!=-1&&a[nx][ny]==0))continue;
		int q=0,nz=-1;
		b[nx][ny]=1;
		if(a[x][y]==1)
		{
			if(a[nx][ny]==2)q=1;
			if(a[nx][ny]==0)
			{
				q=2;
				nz=1;
			}
		}
		if(a[x][y]==2)
		{
			if(a[nx][ny]==1)q=1;
			if(a[nx][ny]==0)
			{
				q=2;
				nz=2;
			}
		}
		if(z!=-1)
		{
			if(z!=a[nx][ny])q=1;
		}
		s+=q;
		dfs(nx,ny,nz);
		s-=q;
		b[nx][ny]=0;
	}
}
int main()
{
	cin>>m>>n;
	for(int i=1;i<=n;i++)
	{
		int x,y,u;
		cin>>x>>y>>u;
		a[x][y]=u;
		if(u==0)a[x][y]=2;
	}
	b[1][1]=1;
	dfs(1,1,-1);
	if(mins==100000000)cout<<-1;
	else cout<<mins;
	return 0;
} 
2021/8/30 17:02
加载中...