解题思路:广度优先算法,使用队列的结构
注意事项:注意更新状态数组v[MAX_POS+1]
参考代码:
#include<stdio.h>
#include<string.h>
#define QUEUE_SIZE 200000
#define MAX_POS 100000
typedef struct{
int pos,t;
}QueueNode;
QueueNode queue[QUEUE_SIZE];
int front=0;
int rear=0;
int v[MAX_POS+1];
void enqueue(int pos,int t){
if(rear<QUEUE_SIZE){
queue[rear].pos=pos;
queue[rear].t=t;
rear++;
}
}
QueueNode dequeue(){
return queue[front++];
}
int bfs(int start,int target){
front=0;
rear=0;
memset(v,0,sizeof(v));
enqueue(start,0);
v[start]=1;
while(front<rear){
QueueNode cur=dequeue();
int cur_pos=cur.pos;
int cur_t=cur.t;
if(cur_pos==target){
return cur_t;
}
if(cur_pos-1>=0 && !v[cur_pos-1]){
v[cur_pos-1]=1;
enqueue(cur_pos-1,cur_t+1);
}
if(cur_pos+1<=MAX_POS && !v[cur_pos+1]){
v[cur_pos+1]=1;
enqueue(cur_pos+1,cur_t+1);
}
if(cur_pos*2<=MAX_POS && !v[cur_pos*2]){
v[cur_pos*2]=1;
enqueue(cur_pos*2,cur_t+1);
}
}
return -1;
}
int main()
{
long long N,K;
scanf("%lld %lld",&N,&K);
if(N>K){
printf("%lld",N-K);
return 0;
}
int min_t=bfs(N,K);
printf("%d",min_t);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复