rt,为什么这样搜不对QAQ,只有65
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
int mp[105][105],dp[105][105][2];
int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
int n,m;
bool vis[105][105][2];
int dfs(int x,int y,int now,bool ok){
if(x==n&&y==n) return 0;
if(vis[x][y][now]) return dp[x][y][now];
vis[x][y][now]=true;
for(int i=0;i<4;i++){
int xx=x+dx[i],yy=y+dy[i];
if(xx<1||xx>n||yy<1||yy>n) continue;
if(mp[xx][yy]==-1){
if(ok) continue;
dp[x][y][now]=min(dp[x][y][now],dfs(xx,yy,now,true)+2);
}
else if(mp[xx][yy]!=-1&&mp[xx][yy]!=now) dp[x][y][now]=min(dp[x][y][now],dfs(xx,yy,mp[xx][yy],false)+1);
else dp[x][y][now]=min(dp[x][y][now],dfs(xx,yy,now,false));
}
if(dp[x][y][now]>=1e18) vis[x][y][now]=false;
return dp[x][y][now];
}
signed main()
{
std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
memset(mp,-1,sizeof mp);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dp[i][j][0]=dp[i][j][1]=1e18;
for(int i=1;i<=m;i++){
int a,b,c; cin>>a>>b>>c;
mp[a][b]=c;
}
int res=dfs(1,1,mp[1][1],false);
if(res>=1e18) cout<<-1<<'\n';
else cout<<res<<'\n';
return 0;
}