bfs 中很简单的一道问题
传送门 : catch that cow
- 思路
open表 用queue模板
closed表 用MAXN长的一维数组即可
人的位置是起点,牛的位置是终点。走一步形成双向边,跳着走(乘2)形成单向边,画出图。(需要查重。)然后愉快的bfs即可。
- 代码如下:
#include <cstdio>
#include <queue>
using namespace std;
int closed[100001];
int n,k;
int dfs()
{
queue<int> open;
//int depth = 0;
open.push(n);
int cur;
closed[n] = 0;
int x[3];//move
while(open.size()){
cur = open.front();
open.pop();
if(cur == k)break;
x[0] = cur + 1;
x[1] = cur - 1;
x[2] = cur * 2;
for(int i=0;i<3;i++)
if(x[i]>=0&&x[i]<=100000&&closed[x[i]]==-1){
open.push(x[i]);
closed[x[i]] = closed[cur] + 1;
}
}
return closed[cur];
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<=100000;i++)
closed[i] = -1;
int res = dfs();
printf("%d\n",res);
return 0;
}
AC~