感觉memset没问题QwQ
#include<bits/stdc++.h>
using namespace std;
int m,n,a[110][110],b[110][110],vis[110][110],minn=1e9,ans=0;
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
void dfs(int x,int y,int tmp){
for(int i=0;i<4;i++){
int xx=x+dx[i],yy=y+dy[i],q;
if(xx<=0||xx>m||yy<=0||yy>m||vis[xx][yy]){
continue;
}
if(tmp!=-1){
if(a[xx][yy]!=-1){
if(tmp!=a[xx][yy]){
q=1;
}else{
q=0;
}
}else{
continue;
}
}else{
if(a[xx][yy]==-1){
q=2;
tmp=a[x][y];
}else{
if(a[x][y]!=a[xx][yy]){
q=1;
}else{
q=0;
}
}
}
if(b[xx][yy]>b[x][y]+q){
b[xx][yy]=b[x][y]+q;
vis[x][y]=1;
dfs(xx,yy,tmp);
vis[x][y]=0;
}
}
return;
}
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
b[i][j]=1e9;
}
}
memset(a,0xff,sizeof(a));//memset(a,-1,sizeof(a));
for(int i=1;i<=n;i++){
int x,y,tmp;
cin>>x>>y>>tmp;
a[x][y]=tmp;
}
vis[1][1]=1;
dfs(1,1,-1);
if(b[m][m]==1e9)
cout<<-1;
else
cout<<b[m][m];
return 0;
}