| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 568 人关注过本帖
标题:请问一下,为什么会重复打印两遍呢?
只看楼主 加入收藏
cyz11cyz
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2010-6-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
请问一下,为什么会重复打印两遍呢?
人狼羊菜渡河问题,
不知道为什么会打印两次。
程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STEP 20
// index: 0 - 狼,1-羊,2-菜,3-农夫,value:0-本岸,1-对岸

int a[MAX_STEP][4];
int b[MAX_STEP];
char *name[] =
{ "空手", "带狼", "带羊", "带菜"
};

void search(int iStep) {
    int i;
    if (a[iStep][0] + a[iStep][1] + a[iStep][2] + a[iStep][3] == 4)
    {
        for (i = 0; i <iStep; i++)
        {
            if (a[i][3] == 0)
                printf(" %d:%s到对岸\n", i+1,name[b[i] + 1]);
            else
                printf(" %d:%s回本岸\n", i+1,name[b[i] + 1]);
        }
        printf("\n");
        return;
    }
    for (i = 0; i <iStep; i++)
        if (memcmp(a[i], a[iStep], sizeof(a[i])) == 0)
            return;
    if (a[iStep][1] != a[iStep][3] &&
        (a[iStep][2] == a[iStep][1] || a[iStep][0] == a[iStep][1]))
        return;
    for (i = -1; i <= 2; i++)
    {
        b[iStep] = i;
        memcpy(a[iStep + 1], a[iStep], sizeof(a[iStep + 1]));
        a[iStep + 1][3] = 1 - a[iStep + 1][3];
        if (i == -1)
            search(iStep + 1);  
        else if (a[iStep][i] == a[iStep][3])
        {
            a[iStep + 1][i] = a[iStep + 1][3];
            search(iStep + 1);
} } }

int main()
{
    int i;
    for(i=0;i<4;i++)
        a[0][i]=0;
    search(0);
    return 0;
}
搜索更多相关主题的帖子: search index 
2011-05-02 23:53
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:14 
程序代码:
for (i = -1; i <= 2; i++)
    {
        b[iStep] = i;
        memcpy(a[iStep + 1], a[iStep], sizeof(a[iStep + 1]));
        a[iStep + 1][3] = 1 - a[iStep + 1][3];
        if (i == -1)
            search(iStep + 1);  //
        else
            if (a[iStep][i] == a[iStep][3])
           {
            a[iStep + 1][i] = a[iStep + 1][3];
            search(iStep + 1); //
           }

 } //上面的部分搞得search执行了两次吧!


   唯实惟新 至诚致志
2011-05-03 07:04
cyz11cyz
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2010-6-3
收藏
得分:0 
以下是引用qq1023569223在2011-5-3 07:04:17的发言:

for (i = -1; i <= 2; i++)
    {
        b = i;
        memcpy(a1], a, sizeof(a1]));
        a1][3] = 1 - a1][3];
        if (i == -1)
            search(iStep + 1);  //
        else
            if (a == a[3])
           {
            a1] = a1][3];
            search(iStep + 1); //
           }
 } //上面的部分搞得search执行了两次吧!
 
谢谢!
2011-05-08 15:28
lccwyj
Rank: 4
等 级:业余侠客
帖 子:71
专家分:203
注 册:2011-5-6
收藏
得分:0 
请教一下这是啥原理?我不懂。
2011-05-08 15:39
快速回复:请问一下,为什么会重复打印两遍呢?
数据加载中...
 
   



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

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