#include<bits/stdc++.h>
using namespace std;
int mat[105][105],sum,m,cnt,minv=0x7f7f7f7f;
int dx[10]={0,1,0,-1},dy[10]={1,0,-1,0};
int visited[105][105];
void dfs(int x,int y)
{
if(x==m&&y==m)
{
if(minv==0x7f7f7f7f||sum<minv)
minv=sum;
return;
}
if(x<1||y<1||x>m||y>m||cnt>1||visited[x][y])//非淳朴版
return;
visited[x][y]=1;
for(int i=0;i<4;i++)
{
int tx=x+dx[i],ty=y+dy[i];
int dsum=0,now=mat[x][y],nxt=mat[tx][ty],tmp=cnt;
if(nxt==-1)
{
cnt++;
dsum=2;
mat[tx][ty]=now;
}
else
{
if(nxt!=now)
dsum=1;
cnt=0;
}
sum+=dsum;
dfs(tx,ty);
sum-=dsum;
mat[tx][ty]=nxt,cnt=tmp;
}
visited[x][y]=0;
}
int main()
{
memset(mat,-1,sizeof(mat));
int x,y,c,n;
scanf("%d %d",&m,&n);
for(int i=1;i<=n;i++)
{
scanf("%d %d %d",&x,&y,&c);
mat[x][y]=c;
}
dfs(1,1);
printf("%d",minv);
return 0;
}
哪位大佬过来帮忙一下