您一个dfs为什么要写bfs?
蒟蒻本题只会bfs
```cpp
#include <bits/stdc++.h>
#define N 1007
#define INF 0x3f3f3f3f
#define white -1
#define yellow 1
#define red 0
using namespace std;
const int DX[]={1,0,-1,0},DY[]={0,1,0,-1};
struct node
{
bool magic;
int color;
int x;
int y;
int dis;
node(int a,int b,int c,int d,bool pd)
{
x=a;
y=b;
color=c;
dis=d;
magic=pd;
}
bool operator < (const node &A) const
{
return dis>A.dis;
}
};
priority_queue <node> q;
int dis[N][N];
int color[N][N];
void bfs()
{
dis[1][1]=0;
q.push(node(1,1,color[1][1],0,0));
while(!q.empty())
{
node t=q.top();
q.pop();
for(int i=0;i<4;i++)
{
int x=t.x+DX[i],y=t.y+DY[i];
if(color[x][y]==t.color)
{
if(t.dis<dis[x][y])
{
q.push(node(x,y,color[x][y],t.dis,0));
dis[x][y]=t.dis;
}
}
else if(color[x][y]==red||color[x][y]==yellow)
{
if(t.dis+1<dis[x][y])
{
q.push(node(x,y,color[x][y],t.dis+1,0));
dis[x][y]=t.dis+1;
}
}
else if(color[x][y]==white&&t.magic==0)
{
if(t.dis+2<dis[x][y])
{
q.push(node(x,y,color[t.x][t.y],t.dis+2,1));
dis[x][y]=t.dis+2;
}
}
}
}
}
int main()
{
memset(color,white,sizeof(color));
memset(dis,0x3f,sizeof(dis));
int n,m;
scanf("%d%d",&n,&m);
while(m--)
{
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
color[x][y]=c;
}
bfs();
if(dis[n][n]==INF)puts("-1");
else printf("%d\n",dis[n][n]);
return 0;
}
```
by Smile_Cindy @ 2019-11-11 21:53:34
@[Alpha](/user/87058) 额,记错了
by GoldenFishX @ 2019-11-13 21:28:34