dfs 55分!!!
#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[101][101];
int v[101][101];
int minn=0x3f3f3f3f;
int dis[5][2]={{0,0},{-1,0},{0,1},{1,0},{0,-1}};
void f(int x,int y,int k,int sum){
if(x==m && y==m){
minn=min(minn,sum);
}
for(int i=1;i<=4;i++){
int xx=x+dis[i][0];
int yy=y+dis[i][1];
if(xx>=1 && xx<=m && yy>=1 &&yy<=m && v[xx][yy]==0){
if(a[x][y]==a[xx][yy]){
v[xx][yy]=1;
f(xx,yy,1,sum);
v[xx][yy]=0;
}
else if(a[x][y]!=a[xx][yy] && a[xx][yy]!=0){
v[xx][yy]=1;
f(xx,yy,1,sum+1);
v[xx][yy]=0;
}
else if(a[x][y]!=a[xx][yy] && a[xx][yy]==0 && k==1){
v[xx][yy]=1;
a[xx][yy]=a[x][y];
f(xx,yy,0,sum+2);
v[xx][yy]=0;
a[xx][yy]=0;
}
}
}
}
int main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
int x,y,c;
cin>>x>>y>>c;
c++;
a[x][y]=c;
}
v[1][1]=1;
f(1,1,1,0);
if(minn==0x3f3f3f3f){
cout<<-1;
return 0;
}
cout<<minn;
}
但我不想用bfs
有没有大佬帮忙优化一下dfs