#include <iostream>
#include <queue>
#include <memory.h>
using namespace std;
const int MAX = 100001;
int n, k, path[MAX];
bool vis[MAX];
void bfs()
{
int tmp;
queue<int> q;
//队列的初始化
while (q.size() != 0)
q.pop();
q.push(n);
path[n] = 0;
while (q.size() != 0){
tmp = q.front();
q.pop();
vis[n] = true;
if (tmp == k) break;
else{
//第一种的做法,坐标减一
if (tmp - 1 >= 0){
if (!vis[tmp-1]){
q.push(tmp-1);
path[tmp-1] = path[tmp] + 1;
vis[tmp-1] = true;
}
}
//第二种的做法,坐标加一
if (tmp + 1 <= 100000){
if (!vis[tmp+1]){
q.push(tmp+1);
path[tmp+1] = path[tmp] + 1;
vis[tmp+1] = true;
}
}
//第三种做法,坐标乘以2
if (tmp * 2 <= 100000){
if (!vis[tmp*2]){
q.push(tmp*2);
path[tmp*2] = path[tmp] + 1;
vis[tmp*2] = true;
}
}
}
}
cout << path[k] << endl;
}
int main()
{
while (cin >> n >> k){
memset(path, 0, sizeof(path));
memset(vis, false, sizeof(vis));
bfs();
}
system("pause");
}
poj 3278 Catch That Cow
最新推荐文章于 2024-09-04 11:33:10 发布
本文介绍了一种基于广度优先搜索(BFS)的寻路算法实现,该算法用于解决从起点到终点的最短路径问题。通过使用C++语言,结合队列数据结构,实现了坐标在三个方向上的变化:减一、加一和乘二,并记录了到达每个点的最短步数。
摘要由CSDN通过智能技术生成