终极警告:走不到终点
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int m,n,a[101][101],ans=10000000;
bool mark[101][101];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void dfs(int x,int y,int sum,bool mod){
if(sum>=ans)return ;
if(x==m&&y==m){cout<<sum;ans=sum;return ;}
for(int i=0;i<4;i++)
if(x+dx[i]>=1&&x+dx[i]<=m&&y+dy[i]>=1&&y+dy[i]<=m&&!mark[x+dx[i]][y+dy[i]]){
if(a[x+dx[i]][y+dy[i]]==2)
if(!mod){
mark[x+dx[i]][y+dy[i]]=1,a[x+dx[i]][y+dy[i]]=a[x][y];
dfs(x+dx[i],y+dy[i],sum+2,1);
mark[x+dx[i]][y+dy[i]]=0,a[x+dx[i]][y+dy[i]]=2;}
else if(a[x+dx[i]][y+dy[i]]!=a[x][y]){
mark[x+dx[i]][y+dy[i]]=1;
dfs(x+dx[i],y+dy[i],sum+1,0);
mark[x+dx[i]][y+dy[i]]=0;}
else {
mark[x+dx[i]][y+dy[i]]=1;
dfs(x+dx[i],y+dy[i],sum,0);
mark[x+dx[i]][y+dy[i]]=0;}
}
}
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)a[i][j]=2;
for(int i=1;i<=n;i++){
int x,y,c;
cin>>x>>y>>c;
a[x][y]=c;
}
mark[1][1]=1;
dfs(1,1,0,0);
if(ans==10000000) cout<<-1;
else cout<<ans;
return 0;
}