Problem : Catch That Cow
Description:Jhon要去抓回他的逃出去的牛,Jhon在任何点X都可以在单位时间内到达X-1或X+1或2X处。假设牛不动,问Jhon最短能用几步抓住他的牛。
Solution:广度优先搜索。
Code(C++):
#include<iostream>
#define MAX 1000005
using namespace std;
struct Point
{
int value;
int step;
Point(){}
Point(int v,int s=0)
{
value=v;
step=s;
}
};
int visit[MAX];
Point queue[MAX];
int Bfs(int x,int y)
{
if(x==y)
return 0;
int head=0,tail=0,i;
memset(visit,0,sizeof(visit));
Point start(x,0);
queue[tail]=start;
tail++;
visit[x]=1;
while(head!=tail)
{
Point temp=queue[head];
head++;
head%=MAX;
Point n[3]={
Point(temp.value-1,temp.step+1),
Point(temp.value+1,temp.step+1),
Point(temp.value*2,temp.step+1)
};
for(i=0;i<3;i++)
{
if(n[i].value==y)
return n[i].step;
if(n[i].value>=0&&n[i].value<1000005&&!visit[n[i].value])
{
queue[tail]=n[i];
tail++;
tail%=MAX;
visit[n[i].value]=1;
}
}
}
}
int main()
{
int m,n;
cin>>m>>n;
cout<<Bfs(m,n)<<endl;
return 0;
}