acm-bfs入门(抓住奶牛)
2012-08-08 15:52
197 查看
2054: 抓住奶牛!
Time Limit: 1 Sec Memory Limit:64 MB
Submit: 135 Solved: 27
[Submit][Status][Web Board]
Description
不得了,xiaoC的农场里跑出来了一只奶牛,这可是让xiaoC很是揪心啊,于是xiaoC立刻放下了手头的工作,想疯狂的奶牛奋力追去,但说来也怪,xiaoC的走法还真有一点特殊,他每一步有两种走法: 步行:xiaoC可以从任何X位置,一步走到X-1或X+1位置 跳跃:xiaoC可以从任意X位置,一步跳跃到2*X的位置 现在我们假设奶牛并没有意识到xiaoC的追来,还在原地傻傻地站着,请你来帮xiaoC计算一下,他需要多少步,才能把奶牛逮住!!!Input
每个测试实例为一行,包含两个数据,N和K,N表示xiaoC现在的位置,K表示奶牛的位置,0 ≤ N,K ≤ 100,000Output
输出xiaoC能逮住奶牛的最少步数,每个测试实例输出一行Sample Input
5 17Sample Output
4HINT
在这个实例中最快的路径为5-10-9-18-17,共四步BFS
基础的bfs题目:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
int pos; //当前位置
int step; //达到当前位置的步数
}node;
typedef struct queue //定义队列
{
int front;
int rear;
node s[300000];
}queue;
queue bark;
int flag[300000]; //标记数组用来记录当前位置是否走过
//进入队列
void enqueue(node k)
{
bark.s[bark.rear]=k;
bark.rear++;
}
//出队列
node dequeue()
{
int t=bark.front;
bark.front++;
return bark.s[t];
}
//判断队列是否为空
int isempty()
{
if(bark.front == bark.rear)return 1;
else return 0;
}
int minstep(int n,int end)
{
node k,t;
bark.front = bark.rear=1;
k.pos=n;k.step=0;
flag
=1;
enqueue(k); //第一个点进入队列
while(!isempty())
{
k=dequeue();
flag[k.pos]=1; //弹出队头元素,然后广搜
if(k.pos==end)return k.step; //满足条件,输出结果
if(k.pos<end && 1!=flag[k.pos+1]) //可以向后走 X-1
{
t.pos = k.pos+1;
t.step = k.step+1;
flag[t.pos]=1;
enqueue(t); //满足条件的节点入队
}
if(k.pos>0 && 1!=flag[k.pos-1]) //可以向前走 X+1
{
t.pos = k.pos-1;
t.step = k.step+1;
flag[t.pos]=1;
enqueue(t);
}
if(k.pos<end && 1!=flag[k.pos*2]) //可以向前走 X*2
{
t.pos=k.pos*2;
t.step=k.step+1;
flag[t.pos]=1;
enqueue(t);
}
}
return 0;
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(flag,0,sizeof(flag)); //标记数组初始化
printf("%d\n",minstep(n,k));
}
return 0;
}
相关文章推荐
- 广度搜索(BFS)入门题目:抓住那头牛
- 广度优先搜索bfs与抓住那头奶牛(Catch that cow, poj3278)
- ACM基础 BFS入门
- ACM 130. [USACO Mar08] 游荡的奶牛(dp+BFS)
- HDU 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)
- poj 3278 && bzoj 1646: [Usaco2007 Open]Catch That Cow 抓住那只牛(BFS)
- 新手入门 acm 输入输出练习
- ACM java入门和基本技巧
- 博弈 入门 ( ACM 博弈 组合 )
- hdu 4751 Divide Groups bfs (2013 ACM/ICPC Asia Regional Nanjing Online 1004)
- HDOJ1240 BFS入门水题 + BFS模板程序
- 速戳!小白看 超详细bfs入门/迷宫问题POJ3984
- ACM入门建议
- 【入门推荐】ACM之输入
- ACM——01——1008: 【入门】将小写字母转换为大写字母 【运算符】
- ACM之八数码问题----BFS搜索----数独游戏的模拟(下)
- 第四届 山东省ACM B Thrall’s Dream(连通图 OR BFS)
- BFS入门-Red and Black
- 【算法竞赛入门经典】6.4.2用BFS求最短路 例题6-14 UVa816
- ACM 1004 四子连棋(BFS)