代码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了 这是什么玄学问题???