代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,n;
int save[105][105],mapp[105][105],flag[105][105]={0};
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
void dfs(int x,int y,int t)
{
int i,j;
if(x<1||x>m||y<1||y>m)
return;
for(i=0;i<4;i++)
{
int nx,ny,q,nt=-1;
nx=x+dx[i];
ny=y+dy[i];
if(nx<1||nx>m||ny<1||ny>m||flag[nx][ny]==1)
continue;
if(t!=-1)
{
if(mapp[nx][ny]!=-1)
{
if(t!=mapp[nx][ny])
q=1;
else
q=0;
}
else
continue;
}
else
{
if(mapp[nx][ny]==-1)
{
q=2;
nt=mapp[x][y];
}
else
{
if(mapp[x][y]!=mapp[nx][ny])
q=1;
else
q=0;
}
}
if(save[nx][ny]>save[x][y]+q)
{
save[nx][ny]=save[x][y]+q;
flag[x][y]=1;
dfs(nx,ny,nt);
flag[x][y]=0;
}
}
}
signed main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
save[i][j]=99999999;
save[1][1]=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
mapp[i][j]=-1;
for(int i=1;i<=n;i++)
{
int x,y,c;
cin>>x>>y>>c;
mapp[x][y]=c;
}
flag[1][1]=1;
dfs(1,1,-1);
cout<<save[m][m];
return 0;
}
请大佬指教。