HDU-2717

//题目大意:求一个数变成另一个数需要几步?给你的操作有pre+1,pre-1,pre*2.

//我们可以把这个问题转换成最短路问题,利用BFS进行。

AC代码:

#include<stdio.h>
#include<string.h>
#define max 100005
int n,k; int vis[max]; struct node { int x,step; } queue[max]; void bfs() { struct node now,pre; int e=0,h=1;
    queue[0].x=n;
    queue[0].step=0; while(e<h) {
        pre=queue[e]; if(pre.x==k) {
            printf("%d\n",pre.step); return; } int i; for(i=1; i<=3; i++) { if(i==1) {
                now.x=pre.x+1;
                now.step=pre.step+1; if(! vis[now.x]&&now.x<max) {
                    vis[now.x]=1;
                    queue[h++]=now; } } if(i==2) {
                now.x=pre.x-1;
                now.step=pre.step+1; if(! vis[now.x]&&now.x<max) {
                    vis[now.x]=1;
                    queue[h++]=now; } } if(i==3) {
                now.x=pre.x*2;
                now.step=pre.step+1; if(! vis[now.x]&&now.x<max) {
                    vis[now.x]=1;
                    queue[h++]=now; } } }
        e++; } } int main() { while(scanf("%d%d",&n,&k)!=EOF) {
        memset(vis,0,sizeof(vis));
        bfs(); } }


你可能感兴趣的:(HDU-2717)