Hrbust Online Judge--移动2

Description

在坐标轴[0,500]上存在两点A,B。

点A可以多次移动,每次移动需要遵循如下规则:

1.向后移动一步。

2.向前移动一步。

3.跳到当前坐标*2的位置上。


要求:利用宽搜算法编程求解从A移动到B的步数最少的方案,为使答案统一,要求搜索按照规则1、2、3的顺序进行。

Input

输入包含多组测试用例。

每组测试用例要求输入两个整数A,B。

Output

按要求输出步数最少的方案。

向后走输出"step back"。

向前走输出"step forward"。

跳跃输出"jump"。

对于每组结果需要追加一个空行。

Sample Input
5 17
5 18
3 499
Sample Output
step back
jump
jump
step forward

jump
step back
jump

step forward
jump
jump
jump
step back
jump
jump
step forward
jump
jump
step back

代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
queue<int>q;
int main()
{

    int A,B;
    int book1,t1,m1,m2,m3;
    while(~scanf("%d%d",&A,&B))
    {
        if(A==B) {printf("\n");continue;}
         int step[200],count=0;
         int mtd[600];
        int last[600];
        memset(mtd,-1,sizeof(mtd));
        memset(last,0,sizeof(last));
        q.push(A);mtd[A]=-2;
       while(!q.empty())
        {
             t1=q.front();
             q.pop();
             m1=t1-1;
             m2=t1+1;
             m3=t1*2;
           if(mtd[m1]==-1&&m1>=0&&m1<=500)
            {
                mtd[m1]=0;
               last[m1]=t1;
               if(m1==B) {book1=m1;break;}
               q.push(m1);
            }
            if(mtd[m2]==-1&&m2>=0&&m2<=500)
            {
                 mtd[m2]=1;
                 last[m2]=t1;
                 if(m2==B){book1=m2;break;}
                  q.push(m2);
            }
            if(mtd[m3]==-1&&m3>=0&&m3<=500)
            {
                 mtd[m3]=2;
                 last[m3]=t1;
                if(m3==B) {book1=m3;break;}
                q.push(m3);
            }
        }
        while(mtd[book1]>=0)
            {
               step[++count]=mtd[book1];
                book1=last[book1];
            }
            for(int i=count;i>=1;i--)
            {
                 if(step[i]==0) printf("step back\n");
                else if(step[i]==1) printf("step forward\n");
                else if(step[i]==2) printf("jump\n");
            }
            printf("\n");
            while(!q.empty())
                q.pop();
    }
    return 0;
}


你可能感兴趣的:(Hrbust Online Judge--移动2)