您的位置:首页 > 其它

poj 3278 简单bfs

2010-10-01 21:22 357 查看
Catch That Cow

Time Limit: 2000MSMemory Limit: 65536K
Total Submissions: 18890Accepted: 5816
Description

Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.

* Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
* Teleporting: FJ can move from any point X to the point 2 × X in a single minute.

If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?

Input
Line 1: Two space-separated integers: N and K
Output
Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.
Sample Input
5 17

Sample Output
4

Hint
The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.
代码如下:
#include<iostream>
#include<string.h>
#include<queue>
using namespace std;

int first, end;
int step[100000];
bool vis[100000];

int bfs()
{
queue<int>Q;
Q.push(first);
vis[0] = true;
step[0]=0;
while (!Q.empty())
{
int head = Q.front();
Q.pop();
int next;

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>=0 && next<=100000 && vis[next]==false)
{
step[next] = step[head]+1;
if(next == end)
return step[next];
Q.push(next);
vis[next] = true;
}
}
vis[head] = true;
}
}

int main()
{
while (scanf("%d%d", &first, &end)!=EOF)
{
if(first>=end)
printf("%d/n",first-end);//要减少的话只有减一这种情况
else
{
memset(vis,false,sizeof(vis));
printf("%d/n",bfs());
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: