查了好久
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[110][100]={0},m,n,vis[110][110],ans=0x3fffff;
int dx[10]={0,1,0,-1,0};
int dy[10]={0,0,1,0,-1};
void dfs(int x,int y,bool magic,int mon){
if(x==n&&y==n){
ans=min(ans,mon);
return ;
}
if(vis[x][y]<=mon)return ;
else vis[x][y]=mon;
if(mon>ans)return;
for(int i=1;i<=n;i++){
int xx=dx[i]+x,yy=dy[i]+y;
if(xx>=1&&xx<=m&&yy>=1&&yy<=m){
if(a[x][y]!=0){
if(a[x][y]!=a[xx][yy]){
dfs(xx,yy,magic,mon+1);
}
else{
dfs(xx,yy,magic,mon);
}
}
else{
if(magic){
magic=0;
a[x][y]=a[xx][yy];
dfs(xx,yy,magic,mon+2);
a[x][y]=0;
}
}
}
}
}
signed main(){
memset(vis,0x3ffff,sizeof(vis));
cin>>m>>n;
for(int i=1;i<=n;i++){
int x,y,c;
cin>>x>>y>>c;
a[x][y]=c+1;
}
dfs(1,1,1,0);
if(ans!=0x3fffff)cout<<ans;
else cout<<-1;
return 0;
}