下面是我的代码
#include <bits/stdc++.h>
using namespace std;
int a[105][105];
struct node{
int x,y,val;
};
node dp[105][105];
int n,m;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int main(){
//freopen("pjzt2017c.in","r",stdin);
//freopen("pjzt2017c.out","w",stdout);
scanf("%d%d",&m,&n);
for(int i=0;i<n;i++){
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
if(c==0)a[x][y]=1;
if(c==1)a[x][y]=2;
}
// for(int i=1;i<=m;i++){
// for(int j=1;j<=m;j++)cout<<a[i][j]<<" ";
// cout<<endl;
// }
for(int i=0;i<=m;i++){
for(int j=0;j<=m;j++)dp[i][j].val=1e9,dp[i][j].x=dp[i][j].y=-1;
}
dp[1][1].val=0;
dp[1][1].x=1;
dp[1][1].y=1;
int temp=m*m;
for(int step=0;step<temp;step++){
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
for(int k=0;k<4;k++){
int x=i+dx[k];
int y=j+dy[k];
if(x<1||y<1||x>m||y>m)continue;
int ret=dp[x][y].val;
if(ret>=1e9)continue;
if(a[x][y]==a[i][j]){
if(a[x][y]==0)continue;
}
else if(a[x][y]!=a[i][j]){
ret++;
if(a[i][j]==0)ret++;
}
if(a[dp[x][y].x][dp[x][y].y]==a[i][j]&&a[i][j]!=0&&a[x][y]==0)
ret=dp[x][y].val;
if(a[dp[x][y].x][dp[x][y].y]!=a[i][j]&&a[i][j]!=0
&&a[dp[x][y].x][dp[x][y].y]!=0&&a[x][y]==0)ret=dp[x][y].val+1;
if(ret<dp[i][j].val){
dp[i][j].val=ret;
dp[i][j].x=x,dp[i][j].y=y;
}
}
}
}
if(dp[m][m].val!=1e9){
printf("%d\n",dp[m][m].val);
return 0;
}
}
printf("-1\n");
return 0;
}