dfs55pts求助
查看原帖
dfs55pts求助
984450
zhoujinhong楼主2023/12/2 16:18
#include<bits/stdc++.h>
using namespace std;
const int M=110,N=1010,INF=0x3f3f3f3f;
int m,n,x,y,c,color[M][M],dp[M][M],dx[4]={1,0,-1,0},dy[4]={0,1,0,-1},vis[M][M];
void dfs(int nowx,int nowy,int use,int sum){
	if(nowx==m && nowy==m){
		dp[m][m]=min(dp[m][m],sum);
		return;
	}
	dp[nowx][nowy]=min(dp[nowx][nowy],sum);
	for(int i=0;i<4;i++){
		int u=nowx+dx[i];
		int v=nowy+dy[i];
		if(u>=1 && v>=1 && u<=m && v<=m && !vis[u][v]){
			if(color[u][v]!=-1){
				if(color[u][v]==color[nowx][nowy]){
					vis[u][v]=1;
					dfs(u,v,0,sum);
					vis[u][v]=0;
				}
				else{
					vis[u][v]=1;
					dfs(u,v,0,sum+1);
					vis[u][v]=0; 
				}
			}
			else{
				if(!use){
					vis[u][v]=1;
					color[u][v]=color[nowx][nowy];
					dfs(u,v,1,sum+2);
					vis[u][v]=0;
					color[u][v]=-1;
				}
			}
		}
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	memset(dp,INF,sizeof(dp));
	cin>>m>>n;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			color[i][j]=-1;
		}
	}
	for(int i=1;i<=n;i++){
		cin>>x>>y>>c;
		color[x][y]=c;
	}
	dp[1][1]=0;
	vis[1][1]=1;
	dfs(1,1,0,0);
	if(dp[m][m]!=INF) cout<<dp[m][m];
	else cout<<-1;
	return 0;
}
2023/12/2 16:18
加载中...