蒟蒻dfs暴力25pts求调
查看原帖
蒟蒻dfs暴力25pts求调
1065216
Loka_i楼主2023/8/16 16:21
#include<bits/stdc++.h>
#define fr(j,n) for(int i=j;i<=n;i++)
#define N 1005
using namespace std;
int m,n,ans;
int a[N][N];
bool fd[N][N],f[N][N];
void dfs(int x,int y){
	fd[x][y]=1;
	if(x==m&&y==m)return ;
	if(f[x+1][y])a[x+1][y]=-1;
	else if(f[x-1][y])a[x-1][y]=-1;
	else if(f[x][y+1])a[x][y+1]=-1;
	else if(f[x][y-1])a[x][y-1]=-1;
	if(a[x+1][y]==a[x][y]&&!fd[x+1][y]&&x+1<=m&&y<=m)dfs(x+1,y);
	else if(a[x-1][y]==a[x][y]&&!fd[x-1][y]&&x-1<=m&&y<=m)dfs(x-1,y);
	else if(a[x][y+1]==a[x][y]&&!fd[x][y+1]&&x<=m&&y+1<=m)dfs(x,y+1);
	else if(a[x][y-1]==a[x][y]&&!fd[x][y-1]&&x<=m&&y-1<=m)dfs(x,y-1);
	else if(a[x+1][y]!=-1&&!fd[x+1][y]&&x+1<=m&&y<=m)ans++,dfs(x+1,y);
	else if(a[x-1][y]!=-1&&!fd[x-1][y]&&x-1<=m&&y<=m)ans++,dfs(x+1,y);
	else if(a[x][y+1]!=-1&&!fd[x][y+1]&&x<=m&&y+1<=m)ans++,dfs(x,y+1);
	else if(a[x][y-1]!=-1&&!fd[x][y-1]&&x<=m&&y-1<=m)ans++,dfs(x,y-1);
	else if(!f[x-1][y]&&!f[x][y-1]&&!f[x+1][y]&&!f[x][y+1]){
		if(!fd[x+1][y]&&x+1<=m&&y<=m)ans+=2,f[x][y]=1,a[x+1][y]=a[x][y],dfs(x+1,y);
		else if(!fd[x][y+1]&&x<=m&&y+1<=m)ans+=2,f[x][y]=1,a[x][y+1]=a[x][y],dfs(x,y+1);
		else if(!fd[x-1][y]&&x-1<=m&&y<=m)ans+=2,f[x][y]=1,a[x-1][y]=a[x][y],dfs(x-1,y);
		else if(!fd[x][y-1]&&x<=m&&y-1<=m)ans+=2,f[x][y]=1,a[x][y-1]=a[x][y],dfs(x,y-1);
		else{
			ans=-1;
			return;
		}
	}
	else ans=-1;
	return;
}
int main(){
	scanf("%d%d",&m,&n);
	memset(a,-1,sizeof(a));
	fr(1,n){
		int x,y,w;
		scanf("%d%d%d",&x,&y,&w);
		a[x][y]=w;
	}
	dfs(1,1);
	cout<<ans;
	return 0;
}

没TLE就很离谱

2023/8/16 16:21
加载中...