时间: 2020-11-24|52次围观|0 条评论

题目描述

FJ丢失了他的一头牛,他决定追回他的牛。已知FJ和牛在一条直线上,初始位置分别为x和y,假定牛在原地不动。FJ的行走方式很特别:他每一次可以前进一步、后退一步或者直接走到2*x的位置。计算他至少需要几步追上他的牛。

输入输出格式

输入格式:

 

第一行为一个整数t(≤10),表示数据组数;接下来每行包含一个两个正整数x和y(0<x,y≤10^5),分别表示FJ和牛的坐标。

 

输出格式:

 

对于每组数据,输出最少步数。

 

输入输出样例

输入样例#1:

1 
5 17

输出样例#1:

4

    bfs 哎 为了省行数把俩if合并了。。 卡了40分钟。。
屠龙宝刀点击就送

#include <cstring>
#include <cstdio>
#include <queue>

using namespace std;
struct node
{
    int x,tim;
};
queue<node>q;
int t,x,y;
int calc(int x,int now) {
      return x==1?now+1:(x==3?now*2:now-1);}
int main()
{
    scanf("%d",&t);
    for(;t--;)
    {
        bool vis[100000];
        memset(vis,0,sizeof(vis));
        scanf("%d%d",&x,&y);
        for(;!q.empty();q.pop());
        node tmp;
        tmp.x=x;
        tmp.tim=0;
        vis[x]=1;
        q.push(tmp); 
        for(node now;!q.empty();)
        {
            now=q.front();
            q.pop();
            if(now.x==y) {printf("%d\n",now.tim);break;} 
            for(int i=1;i<=3;++i)
            {
                int to=calc(i,now.x);
                if(to>0&&to<=100000)
                {
                    if(!vis[to])
                    {
                        node nex;
                        vis[to]=1;
                        nex.x=to;
                        nex.tim=now.tim+1;
                        q.push(nex); 
                    }
                }
            }
        }
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/ruojisun/p/7507035.html

原文链接:https://blog.csdn.net/weixin_30342827/article/details/95479504

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《洛谷 P1588 丢失的牛
   

还没有人抢沙发呢~