bfs的问题,答案ok,提交runtime error
2054: 抓住奶牛!Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 55 Solved: 8
[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,000
Output
输出xiaoC能逮住奶牛的最少步数,每个测试实例输出一行
Sample Input
5 17
Sample Output
4
HINT
在这个实例中最快的路径为5-10-9-18-17,共四步
BFS
Source
下面是代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max_size 200000
int ju[200000];
typedef struct{
int data[max_size];
int front;
int rear;
}sqqueue;
sqqueue s;
void clear(sqqueue *s)
{
s->front=s->rear=0;
}
void enqueue(sqqueue *s,int n)
{
s->data[s->rear++]=n;
}
int dequeue(sqqueue *s)
{
return s->data[s->front++];
}
int main()
{
int a,b,k;
while(scanf("%d%d",&a,&b)!=EOF){
if(a>=b){
printf("%d\n",a-b);
continue;
}
clear(&s);
memset(ju,0,sizeof(ju));
ju[a]=1;
enqueue(&s,a);
while(s.front!=s.rear){
k=dequeue(&s);
if(k>=b*2 || k>=50000) continue;
if(k-1==b ||k+1==b ||k*2==b) {
printf("%d\n",ju[k]);
break;
}
if(ju[k-1]==0){
enqueue(&s,k-1);
ju[k-1]=ju[k]+1;
}
if(ju[k+1]==0){
enqueue(&s,k+1);
ju[k+1]=ju[k]+1;
}
if(ju[2*k]==0){
enqueue(&s,2*k);
ju[2*k]=ju[k]+1;
}
}
}
return 0;
}
一开始以为数组小了。。开到100W还不行。。。
别人用数组模拟队列就可以ac。。。
求助!!!