| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2014 人关注过本帖
标题:过河问题
只看楼主 加入收藏
黑衣圣堂
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-13
收藏
 问题点数:0 回复次数:7 
过河问题
本人求一个老老问题,过河问题。就是一岸有狼羊菜农夫,狼吃羊,羊吃菜,农夫在时不吃,如果一次只能带一样到对岸,
编写程序使全部都带到对岸。(谁愿意指点的话,麻烦尽量将代码写标准,最好能附上点注释,在此多谢了!!!
搜索更多相关主题的帖子: 过河 农夫 注释 附上 
2006-03-13 10:44
黑衣圣堂
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-13
收藏
得分:0 
没人来指点指点吗?

我不是一支恣意逃窜的箭,而是一个威灵的射手,我的直感,会引领着,把自我射向,更遥远的,流浪。
2006-03-13 11:46
mwjpiero
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2006-3-4
收藏
得分:0 

我想到的算法是状态转移法

2006-03-13 12:39
黑衣圣堂
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-13
收藏
得分:0 
我想要完整的代码

我不是一支恣意逃窜的箭,而是一个威灵的射手,我的直感,会引领着,把自我射向,更遥远的,流浪。
2006-03-13 16:40
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 

我遍了下面这段代码,但不能打印出农夫带哪样东西的顺序,只可以打印出带每样东西到对岸的情况,希望能给你启示,也希望哪位朋友可以帮我改一改下面的代码.

#include<stdio.h>
#include<string.h>
int
main(void)
{
/*分别定义四个字符串数组来存储题目中四个名字*/
char str_1[]={"Lang"};
char str_2[]={"Yang"};
char str_3[]={"Cai"};
char str_4[]={"Nongfu"};

/*定义四个变量,变量的值可以是1和0**
**1表示在原岸,0表示在对岸**********
**即1表示没有过河,0表示过了河******/

int Lang_flag;
int Yang_flag;
int Cai_flag;
int Nongfu_flag;

/*根据题目所述,农夫不在的时候,狼和羊不可以同时在,
**羊和菜不可以同时在,狼和菜可以同时存在****************
**所以采用四个循环,分在和不在两种情况******************
**再采用IF判断语句,如果农夫不在,狼在羊不在,羊在菜不在
**这几种情况必须同时为真才符合题目要求,所以用&&符号****/

for(Lang_flag=0;Lang_flag<=1;Lang_flag++)
for(Yang_flag=0;Yang_flag<=1;Yang_flag++)
for(Cai_flag=0;Cai_flag<=1;Cai_flag++)
for(Nongfu_flag=0;Nongfu_flag<=1;Nongfu_flag++)
{
if(((Lang_flag&&!Yang_flag)||(!Lang_flag&&Yang_flag))&&
((Yang_flag&&!Cai_flag)||(!Yang_flag&&Cai_flag))&&Nongfu_flag)
{
/*因为无法判断农夫要带几次过河,所以用DO循环*****
**当狼,羊,菜都不在原岸的时候表示全部过了河*****
**这种情况下跳出DO循环***************************/
do
{
/*用表达式?a:b来选择打印的内容*/
printf("%s has been taken.\n",Yang_flag?"Lang":"Yang");
printf("%s has been taken.\n",Cai_flag?"Yang":"Cai");
}while((Lang_flag||Yang_flag||Cai_flag)==0);
}
}
return 0;/*函数返回0,表示结束*/
}


我的原则很简单:不做不喜欢的事!
2006-03-13 21:11
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
我记得那时候上数学建模,他用了一个D开头的算法(具体的给忘了)
不过我也忘记怎么做了,

2006-03-13 22:48
黑衣圣堂
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-13
收藏
得分:0 
多谢lj_860603的帮忙啊,可是你那样只能显示出运行到最后的结果,
我运行了一下试了,结果只有Lang has been taken
Cai has been taken
Yang has been taken
Yang has been taken
也许是我的意思没表达清楚吧,就像你说的那样,用0和1来表示在还是不在,
譬如说狼羊菜用000表示,对岸对应的用111表示到了对岸,程序运行第一步的
时候应该能显示出是怎么带的,运行后应有如下显示:
111
000 (这个表示狼羊菜都在原岸)

101
010 (经过判断将羊带到对岸)

001
110 (经过判断将狼带到对岸)

011
100 (此时狼会吃羊,所以将羊带会,切注意刚带来的狼不能再带回,否则会无限循环)

010
101 (同上判断,将菜带到对岸)

000
111 (程序完成,全部带到对岸)

完整的我想最好能是这样,不应该光只有结果,要不那就太简单了,
不过在这还是很感谢 lj_860603 的帮助和启发

我不是一支恣意逃窜的箭,而是一个威灵的射手,我的直感,会引领着,把自我射向,更遥远的,流浪。
2006-03-14 10:07
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-25 08:49
快速回复:过河问题
数据加载中...
 
   



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

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