玄学问题求大佬求解!!!
查看原帖
玄学问题求大佬求解!!!
499140
3wykx楼主2022/10/2 21:15

代码dfs思路,以下是满分代码:

#include <bits/stdc++.h>
using namespace std;
int m,n,a[105][105],dis[105][105];//注意
int cost(int color,int x,int y){
	if(a[x][y]==-1)return 2;
	if(color==a[x][y])return 0;
	return 1;
}
void dfs(int x,int y,int f,int magic){
	int co,flag,nx,ny;//注意
	if(f>=dis[x][y])return;
	dis[x][y]=f;
	if(x==m&&y==m)return;
	int next[4][2]={{1,0},{0,1},{0,-1},{-1,0}};
	for(int i=0;i<4;i++){
		nx=next[i][0]+x;
		ny=next[i][1]+y;
		co=cost(a[x][y],nx,ny);
		if(x<1||y<1||x>m||y>m)continue;
		flag=0;
		if(co==2){
			if(magic)continue;
			else flag=1,a[nx][ny]=a[x][y];
		}
		dfs(nx,ny,f+co,flag);
		if(flag)a[nx][ny]=-1;
	}
}
int main(){
	int x,y,c;
	memset(a,-1,sizeof(a));
	memset(dis,0x7f,sizeof(dis));
	cin>>m>>n;
	for(int i=1;i<=n;i++){cin>>x>>y>>c;a[x][y]=c;}
	dfs(1,1,0,0);
	if(dis[m][m]>20000)cout<<-1;
	else cout<<dis[m][m];
	return 0;
}

然后把第十行的nx和ny移到第六行定义就RE了 这是什么玄学问题???

2022/10/2 21:15
加载中...