标题:bfs的问题,答案ok,提交runtime error
只看楼主
巴克
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:199
注 册:2012-2-8
结帖率:100%
已结贴  问题点数:100 回复次数:28 
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。。。
求助!!!

搜索更多相关主题的帖子: 奶牛 Memory 2054 傻傻 
2012-03-29 22:43
double聪
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:118
注 册:2011-11-19
得分:0 
呃。。。
2012-03-29 23:00
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
很简单。我有点想知道这里除了我、老杨、小曹外谁还能做这道题?

不是挑衅,是想找有同样爱好的朋友

重剑无锋,大巧不工
2012-03-29 23:21
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
得分:0 
这是最短路径问题吧,可惜我还没学习到这块呢    唉   加紧学习了

编程之路定要走完……
2012-03-29 23:31
moonnight
Rank: 5Rank: 5
等 级:职业侠客
帖 子:158
专家分:380
注 册:2012-3-17
得分:0 
回复 3楼 beyondyf
确实是学的东西太少了
刚学完c,请问要向你们更深的掌握知识,改向那方面学习勒
2012-03-29 23:33
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
得分:10 
  这个题目我感觉可以这样想,以下是在草纸上模拟的情况:
        人的位置是N,  奶牛的位置是K。

人 5    牛  10   N=2/K      跳一步就到达;

人 5    牛  9    2*N-K=1 和 K-N=4 两种情况,用跳就是跳一步,退一步到达, 2 步,用走要 4 步;

人 5    牛  8    2*N-K=2 和 K-N=3 但是 K=N-1*2 退一步 N-1=4,2*4=8,2 步,用跳2*N=10,10-2(二步)=8,共用 3步;

人 5    牛  7    2*N-K=3 和 K-N=2 两种情况,用走 2 步到达,用跳2*N=10,10-3(三步)=7,共用4步;

人 5    牛  6    2*N-K=4 和 K-N=2 跟上面的情况相同。

以上情况当然也可以退一步再跳,总结下来应该是:

if(N=2/K)      5-10; 一步

if(2*N-K<K-N && K>N+(N+1)/2) 5-10-9; 二步

else if(2*N-K<K-N && K=N+(N+1)/2) 5-4-8; 二步

if(2*N-K>K-N) 5-6-7; 二步

一共只有这几种情况,看是 K 否等于 2*N,不等于就判断 K 是否大于或等于2*(N-1) 和 K 是否小于2*(N-1);

如果 K>2*N,就把 K/2再判断,如果 K/2 还大于 2*N,那就继续/2,直到结果<2*N,再按照上面的几种情况分析,因

为上面的效果达到了,再一直跳才是最快的方法。

个人愚见,仅供参考;
2012-03-30 06:07
巴克
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:199
注 册:2012-2-8
得分:0 
回复 3楼 beyondyf
不是爱好不同而是没有学习啊,现在数据结构已经让我们头晕了..算法更没有机会学习了.
2012-03-30 08:16
巴克
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:199
注 册:2012-2-8
得分:0 
回复 2楼 double聪
2012-03-30 08:16
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
小赵再想想。
楼主的算法想法是对的,但数据越界了。手机打字不方便,举个例子你自己想想。
0 10
话说你这题的地址是?昨晚我试图去实际试试,可没找到这只奶牛。

重剑无锋,大巧不工
2012-03-30 08:26
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
得分:0 
回复 9楼 beyondyf
如果是0 10的话就要在加个判断条件了,先走一步然后才能跳,不然就一直在原地跳了。
2012-03-30 09:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-364742-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.388735 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved