#include<bits/stdc++.h>
using namespace std;
int m,n,x,y,c,g[150][150];
bool sp[105][105];
bool st;
int dfs(int x,int y,int x1,int y1,int num)
{
if(x>m||y>m||x<1||y<1)return INT_MAX;//超过范围
if(sp[x][y])return INT_MAX;//走过
sp[x][y]=true;//标记
if(st&&g[x][y]==-1)return INT_MAX; //上一个施展了魔法,且此无颜色
if(st&&g[x][y]!=-1)st=false;
if(g[x][y]!=g[x1][y1]&&g[x][y]!=-1)num++;//颜色不同且这个不为无色
if(g[x][y]==-1)//这里为无色
{
num+=2;
g[x][y]==g[x1][y1];
st=true;
}
if(x==m&&y==m)return num-1;//到终点
return min(dfs(x+1,y,x,y,num),dfs(x,y+1,x,y,num));//,min(dfs(x-1,y,x,y,num),dfs(x,y-1,x,y,num)));
}
int main()
{
cin>>m>>n;
memset(g,-1,sizeof(g));
for(int i=1;i<=n;i++)
{
cin>>x>>y>>c;
g[x][y]=c;
}
int ans=dfs(1,1,1,1,0);
if(ans==INT_MAX)cout<<-1;
else cout<<ans;
}
不知道出了什么问题