我们老师就是这么写的,为什么不对?
//
// main.cpp
// IDE
//
// Created by aa on 2022/12/30.
//
//
#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdio>
using namespace std;
#define ll long long
const ll N=1000;
int fx[20]={0,1,0,-1};
int fy[20]={1,0,-1,0};
char a[N][N];
int d[N][N];
bool vis[N][N];
int n,m,s1,s2,e1,e2;
int ans=1e9;
void inp_io(){
std::ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
void DFS(int x,int y,int sum,int cl){
if(x==n&&y==n){
ans=min(sum,ans);
return;
}
for(int i=0;i<4;i++){
int tx=x+fx[i];
int ty=y+fy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&vis[tx][ty]){
if(a[x][y]||a[tx][ty]){
if(a[tx][ty]==0){
if(sum+2<d[tx][ty]){
vis[tx][ty]=0;
d[tx][ty]=sum+2;
DFS(tx,ty,sum+2,cl);
vis[tx][ty]=1;
}
}
}else{
if(cl==a[tx][ty]&&sum<d[tx][ty]){
vis[tx][ty]=0;
d[tx][ty]=sum;
DFS(tx,ty,sum,cl);
vis[tx][ty]=1;
}else if(sum+1<ans&&sum+1<d[tx][ty]){
vis[tx][ty]=0;
d[tx][ty]=sum+1;
DFS(tx,ty,sum+1,a[tx][ty]);
vis[tx][ty]=1;
}
}
}
}
}
int main(){
inp_io();
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
d[i][j]=1e9;
a[i][j]=0;
vis[i][j]=1;
}
}
while(m--){
int _x,_y,w;
cin>>_x>>_y>>w;
a[_x][_y]=w+1;
}
vis[1][1]=0;
DFS(1,1,0,a[1][1]);
if(ans==1e9){
cout<<-1<<endl;
}else{
cout<<ans<<endl;
}
return 0;
}