Catch That Cow

来源:互联网 发布:云计算系统 编辑:程序博客网 时间:2024/06/05 20:32

题意:从n点走到k点,有三种走法,可以走x-1或x+1或2*x,要求走的步数最少,输出步数

解题思路:专题——简单搜索.bfs求最短路,很基础的bfs,只需要注意一下边界问题就可以了

代码:

#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <cstdio>#include <cmath>#include <vector>#include <queue>using namespace std;#define INF 0x3f3f3f3fconst int maxn=100005;int dir[]={1,-1,0};int st,ed;int dist[maxn];bool inside(int x){    return x>=0&&x<maxn;}int bfs(int s){    for(int i=0;i<maxn;i++)    {        dist[i]=INF;    }    queue<int> que;    dist[st]=0;    que.push(st);    while(!que.empty())    {        int p=que.front();que.pop();        if(p==ed)break;        for(int i=0;i<3;i++)        {            int xx;            if(dir[i])            {                xx=p+dir[i];                if(inside(xx)&&dist[xx]==INF)                {                    dist[xx]=dist[p]+1;                    que.push(xx);                }            }            else            {                xx=p*2;                if(inside(xx)&&dist[xx]==INF)                {                    dist[xx]=dist[p]+1;                    que.push(xx);                }            }        }    }    return dist[ed];}int main(){    while(cin>>st>>ed)    {        int ans=bfs(st);        cout<<ans<<endl;    }    return 0;}/*5 17*/