哪里出问题了
#include<bits/stdc++.h>
using namespace std;
int m,n,ma[105][105],vis[105][105];
int ans=-1;
int net[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
struct node{
int x,y,dis,is_ch;/*是否变了颜色* 0:未变 1:改变*/
int col/*颜色*/;
};
int bfs()
{
queue<node> q;
q.push((node){1,1,0,0,ma[1][1]});
vis[1][1]=1;
while(!q.empty()){
node u=q.front();
q.pop();
vis[u.x][u.y]=1;
for(int i =0;i<4;i++){
int nx=u.x+net[i][0];
int ny=u.y+net[i][1];
if(nx==m&&ny==m){
if(ma[nx][ny]==u.col&&ma[nx][ny]!=0) return u.dis;
if((ma[nx][ny]==1&&u.col==2)||(ma[nx][ny]==2&&u.col==1)) return u.dis+1;
if(ma[nx][ny]==0&&u.is_ch==0) return u.dis+2;
}
if(nx<=m&&nx>=1&&ny<=m&&ny>=1&&vis[nx][ny]==0){
if(ma[nx][ny]==u.col){
q.push((node){nx,ny,u.dis,0,ma[nx][ny]});
}
if((ma[nx][ny]==1&&u.col==2)||(ma[nx][ny]==2&&u.col==1)){
q.push((node){nx,ny,u.dis+1,0,ma[nx][ny]});
}
if(ma[nx][ny]==0&&u.is_ch==0) q.push((node){nx,ny,u.dis+2,1,ma[u.x][u.y]});
}
}
}
}
int main()
{
memset(vis,0,sizeof(vis));
memset(ma,0,sizeof(ma));
scanf("%d%d",&m,&n);
for(int i = 1;i<=n;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
ma[a][b]=c+1; //1:红 2:黄 0:无色
}
int ans=bfs();
cout<<ans;
return 0;
}