poj3278Catch That Cow(bfs)

题目链接:

http://poj.org/problem?id=3278

题目大意就是给你人的位置和牛的位置,你每可以有三种方式移动

向左移动一步,或者向右移动一步,或者移动到你当前位置二倍的位置

问你移动多少次能到牛的地方。

一开始根本想不到用bfs,看来我还是too naive了=,=

AC代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
#define MAX 100005
int vis[MAX],n,k;
queue<int>q;
int step[MAX];
int head,next;
int bfs()
{
    q.push(n);
    step[n]=0;
    vis[n]=1;
    while(!q.empty())
    {
        head=q.front();
        q.pop();
        for(int i=0;i<3;i++)
        {
            if(i==0) next=head-1;
            else if(i==1) next=head+1;
            else next=head*2;
            if(next>MAX || next<0) continue;
            if(vis[next]==0)
            {
                q.push(next);
                step[next]=step[head]+1;
                vis[next]=1;
            }
             if(next==k)  return step[next];
        }
    }
    return -1;
}
int main()
{
    memset(vis,0,sizeof(vis));
    scanf("%d%d",&n,&k);
    if(n>k)
        printf("%d\n",n-k);
    else{
        printf("%d\n",bfs());
    }
}


你可能感兴趣的:(poj,bfs)