请问这样写为什么是正确的
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long ll;
const ll wqd=1e9;
ll m,n,a[1005][1005],d[1005][1005],xx[10005],yy[10005],cnt=0;
ll dx[]={1,-1,0,0},dy[]={0,0,1,-1};
bool v[1005][1005];
//1表示红色,2表示黄色
void dfs(ll x,ll y,ll c,ll sum)
{
if(sum>=d[x][y])
return ;
if(sum>d[m][m])
return ;
d[x][y]=sum;
if(x==m && y==m)
return ;
for(int i=0;i<4;++i)
{
ll nx=x+dx[i],ny=y+dy[i];
if(nx<1 || nx>m || ny<1 || ny>m || v[nx][ny]
|| (a[x][y]==0 && a[nx][ny]==0))
continue;
v[nx][ny]=true;
if(c==a[nx][ny])
dfs(nx,ny,a[nx][ny],sum);
else if(a[nx][ny]>0)
dfs(nx,ny,a[nx][ny],sum+1);
else if(a[x][y]==c)
dfs(nx,ny,c,sum+2);
v[nx][ny]=false;
d[x][y]=min(d[x][y],d[nx][ny]);
}
}
int main()
{
scanf("%lld%lld",&m,&n);
for(int i=1;i<=m;++i)
for(int j=1;j<=m;++j)
d[i][j]=wqd;
for(int i=1;i<=n;++i)
{
ll x,y,c;
scanf("%lld%lld%lld",&x,&y,&c);
a[x][y]=c+1;
}
v[1][1]=true;
dfs(1,1,a[1][1],0);
if(d[m][m]==wqd)
printf("-1\n");
else
printf("%lld\n",d[m][m]);
return 0;
}