| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 901 人关注过本帖
标题:【苦死了】写了3天,代码越写越复杂,现在不知道怎么改了,明天就要交了,就 ...
只看楼主 加入收藏
lupeifeng123
Rank: 2
等 级:论坛游民
帖 子:74
专家分:47
注 册:2012-12-13
收藏
得分:1 
学习精神。。

一步一个脚印,贵在坚持。
2012-12-29 11:17
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:1 
野人和传道士?  这不是A*算法的一个经典是实例嘛  这么多的代码

实在懒得看了 不过你也挺辛苦的  我去找找我写过的农夫过河问题  一会给楼主发

                                         
===========深入<----------------->浅出============
2012-12-29 11:48
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
程序代码:
#include <stdio.h>
char *name[] = {"农夫","","",""};
char *name1[] = {"去对岸","回本岸"};
struct way
{
    int num;//农夫带走的东西 包括他自己
    bool go_back;//带到那里去0表示去对岸 1表示会本岸
};

bool now[4] = {0};//当前状态0表示在本岸1表示在对岸
bool foot[2][2][2][2] = {0};//状态标记表

bool Kill(bool a,bool b,bool c,bool d)//判断是否会吃掉
{
    if((c == b && a != c) || (d == c && a != c))
        return true;
    return false;
}
bool dfs(way w[],int sumway,bool now[])
{
    if(4 == now[0]+now[1]+now[2]+now[3])//如果都在对岸
    {
        for(int i = 0;i<sumway;i++)
            printf("农夫带着%s%s\n",name[w[i].num],name1[w[i].go_back]);
        printf("\n\n");
        return true;
    }
    int i;
    if(0 == now[0])//如果农夫在本岸
    {
        for(i = 0;i<4;i++)//遍历他所能带走的东西(包括带走他自己)
        {
            if(0 == now[i])
            {
                now[0] = now[i] = 1;//试探
                if(!foot[now[0]][now[1]][now[2]][now[3]])//判断
                {
                    if(!Kill(now[0],now[1],now[2],now[3]))
                    {
                        foot[now[0]][now[1]][now[2]][now[3]] = true;//试探
                        w[sumway].num = i; w[sumway++].go_back = 0;//记录路径                    
                        dfs(w,sumway,now);//继续搜索
                        foot[now[0]][now[1]][now[2]][now[3]] = false;//回溯
                        sumway--;
                    }
                }
                now[0] = now[i] = 0;//回溯
            }
        }
        return false;
    }
    else //如果农夫在对岸 下面注释同上
    {
        for(i = 0;i<4;i++)
        {
            if(1 == now[i])
            {
                now[0] = now[i] = 0;
                if(!foot[now[0]][now[1]][now[2]][now[3]])
                {
                    if(!Kill(now[0],now[1],now[2],now[3]))
                    {
                        foot[now[0]][now[1]][now[2]][now[3]] = true;
                        w[sumway].num = i; w[sumway++].go_back = 1;                    
                        if(dfs(w,sumway,now))
                            return true;
                        foot[now[0]][now[1]][now[2]][now[3]] = false;
                        sumway--;
                    }
                }
                now[0] = now[i] = 1;
            }
        }
        return false;
    }
}

int main()
{
    way w[100] = {0};
    dfs(w,0,now);
    return 0;
}

                                         
===========深入<----------------->浅出============
2012-12-29 11:51
快速回复:【苦死了】写了3天,代码越写越复杂,现在不知道怎么改了,明天就要交 ...
数据加载中...
 
   



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

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