解题思路:广度优先算法,使用队列的结构

注意事项:注意更新状态数组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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论