#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int MAXN = 100001;
struct Status{
int n;
int t; //到n 所消耗的时间
Status(int n, int t): n(n), t(t){
}
};
bool visit[MAXN]; //记录走过的路径
int BFS(int n, int k) {
queue<Status> myQueue;
myQueue.push(Status(n, 0)); //压入初始状态,方便后面计算
visit[n] = true;
while(!myQueue.empty()){
Status current = myQueue.front();
myQueue.pop();
if(current.n == k){ //查找成功
return current.t;
}
for(int i = 0; i < 3; i++){
Status next(current.n, current.t + 1);
if(i == 0){
next.n += 1;
}else if(i == 1){
next.n -= 1;
}else{
next.n *= 2;
}
if(next.n < 0 || next.n >= MAXN || visit[next.n]){
continue; //新状态不合法
}
myQueue.push(next); //压入新的状态
visit[next.n] = true; //更新访问点状态
}
}
}
int main(int argc, char** argv) {
int n, k;
scanf("%d %d", &n, &k);
memset(visit, false, sizeof(visit));
printf("%d\n", BFS(n, k));
return 0;
}
【计算机考研机试指南】第九章 搜索:BFS——Catch That Cow
最新推荐文章于 2021-11-24 16:56:44 发布