标题:bfs的问题,答案ok,提交runtime error
只看楼主
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
呃,小赵,呵呵,别介意我这么说,你的想法不具有普适性。可以认为你想的是一种贪心算法,是个近似解,不是最优解。
我的例子是提醒楼主,当k = 0时, ju[k - 1]越界。同样的总是也会发生在数组的另一端。
呵呵,让大家再想想。

晚上前,请老杨或小曹给出解释好了。他俩的性格要是看见这题肯定会来回答的
如果他们今天没来论坛,那明天我将给出解释。晚上约好和朋友去K歌,可能就不来了。
当然也欢迎其他朋友解答。

重剑无锋,大巧不工
2012-03-30 10:45
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
得分:0 
回复 3楼 beyondyf
除了你们,吾等小辈焉知广度遍历三叉?
2012-03-30 11:18
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
回复 12楼 C_printf
不知为何不学?

重剑无锋,大巧不工
2012-03-30 11:38
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
得分:0 
回复 13楼 beyondyf
我既然过目就知道用什么算法,你怎知道我没学?
2012-03-30 11:41
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
回复 14楼 C_printf
你说汝辈焉知。我怎知道你已经知道?

这本就是个练习题,题目中已经提示用广搜。看出来不等于能做出来。

既然你已经知道如何做,为何不做出来?

如果觉得楼主的100分还少,我可以给你再加分。

不为别的,只为交个能在算法层面交流的朋友。

重剑无锋,大巧不工
2012-03-30 11:48
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:10 
我上个 不知道正确不 楼主也不给地址
程序代码:
#include <stdio.h>
#define  N 10000

int judge(int a[], int n, int m)
{
    int i;
   for (i = 0; i < n; i++)
       if (m == a[i])
           return 1;
       return 0;
}
int status(int a[N], int n, int b[N])
{
   int i, j = 0;
   for (i = 0; i < n; i++)
   {
       b[j++] = a[i] - 1;
       b[j++] = a[i] + 1;
       b[j++] = 2 * a[i];
   }
   return j;
  
}
int main(void)
{
    int a[N] , b[N] , c[N];
    int cow, man, count = 0;
    int len, len1, len2, i;

    for(i = 0; i < N; i++)
    {
        a[i] = b[i] = c[i] = 0;
    }
    while(EOF != scanf("%d%d",&man, &cow))
    {
        if(man >= cow)
        {
            printf("%d\n", man - cow);
        }
        else
        {
            while(1)
            {
                count = 0;
                a[0] = man;
                len = 1;
                count++;                               
                while(1)
                {
                    len1 = status(a, len, b);
                    if (judge(b, len1, cow))
                        break;
                    count++;
                    len2 = status(b, len1, c);
                    if (judge(c, len2, cow))
                        break;
                    count++;
                    len = status(c, len2, a);
                    if (judge(a, len, cow))
                        break;
                    count++;
                }
                printf("%d\n", count);
                break;
            }
        }
    }
    return 0;
}

梅尚程荀
马谭杨奚







                                                       
2012-03-30 12:52
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:40 
呵呵 杨大哥我来啦
http://
10001116    laoyang103    3278    Accepted    1152K    16MS    G++    1060B    2012-03-30 13:38:25
程序代码:
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;

int dp[100005];
bool foot[100005];
int n,k;
int run[] = {-1,1};
int bfs()
{
    queue<int> q;
    int now = n;
    q.push(now);
    foot[now] = true;
    while(!q.empty())
    {
        now = q.front();
        q.pop();
        if(now == k)
            return dp[now]; 
        for(int i = 0;i<2;i++)
        {
            if(now+run[i] >= 0 && now+run[i] <= 100000 && 
                !foot[now+run[i]])
            {
                q.push(now+run[i]);
                foot[now+run[i]] = true;
                dp[now+run[i]] = dp[now]+1;
            }
        }
        if((now<<1) <= 100000 && !foot[now<<1])
        {
            q.push(now<<1);
            foot[now<<1] = true;
            dp[now<<1] = dp[now]+1;
        }
    }
    return -1;
}

int main ()
{
    while(EOF != scanf("%d%d",&n,&k))
    {
        memset(foot,0,sizeof(foot));
        memset(dp,0,sizeof(dp));
        printf("%d\n",bfs());
    }
    return 0;
}


[ 本帖最后由 laoyang103 于 2012-3-30 13:43 编辑 ]
收到的鲜花
  • beyondyf2012-03-30 13:38 送鲜花  50朵   附言:原创内容

                                         
===========深入<----------------->浅出============
2012-03-30 13:27
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
回复 16楼 有容就大
我把刚刚把你的代码的#define N 10000 改成了 #define N 100005

然后拿到POJ去测试了下   不过还是 runtime error

                                         
===========深入<----------------->浅出============
2012-03-30 13:33
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
呵呵,这你都能找到。他的题编号是2054,不知道是哪个学校的。不过应该和北大这个是一个题。

不错。那就请老杨详细解释一下算法吧。可以作为讲义给其他同学借鉴学习。

重剑无锋,大巧不工
2012-03-30 13:37
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
得分:0 
回复 17楼 laoyang103
#include <queue>
 着玩意可以用吗?

最基础的往往是你最容易忽略的!
2012-03-30 13:53



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




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

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