主题:出个题,农夫带着狼、羊、白菜过河!大家进来看看
公孙成
[专家分:1040] 发布于 2004-09-10 20:45:00
一个农夫带着狼、羊、白菜过河,狼吃羊,羊吃白菜,所以不能让它们单独在一起。
编程输出过河的方法
[em4]
回复列表 (共23个回复)
沙发
公孙成 [专家分:1040] 发布于 2004-09-10 21:29:00
这道题我不会做
我看是不是可以给个数组
元素分别取值2,1,-1,1分别代表农夫,狼,羊,白菜
如果这些数两两相加不等于0的话,当2不在的时候表示可以让他们在一起
不然不能让他们在一起.
不知这个想法是否可行
板凳
faintzw [专家分:2660] 发布于 2004-09-10 21:37:00
这个思路似乎不错啊
并且应该是可以实施的
当初我们市的重点高中考试我时就有这道题,我好像就是这样回答的,不知道对不对
有见解的朋友可以来讨论一下
3 楼
公孙成 [专家分:1040] 发布于 2004-09-10 21:54:00
我现在只是一个想法,就是不知具体实施!请大家伙帮帮忙,搞搞定!
4 楼
staa [专家分:3690] 发布于 2004-09-10 22:59:00
这个题的关键在于羊的运用,因为羊是食物链的中节。
5 楼
faintzw [专家分:2660] 发布于 2004-09-10 23:21:00
的确是中节。但是有什么用呢?
不明白
6 楼
staa [专家分:3690] 发布于 2004-09-11 11:24:00
也就是说其它的只过一次,而羊则要反复地过河
7 楼
faintzw [专家分:2660] 发布于 2004-09-11 12:20:00
嗯
这个思路也不错。能写出程序吗
8 楼
诸葛亮的很 [专家分:160] 发布于 2004-09-12 18:18:00
过河的话,用木筏么?
是不是只有人可以操纵木筏呢?
9 楼
faintzw [专家分:2660] 发布于 2004-09-14 22:33:00
我把这道题转化成了找通路的问题
可见http://www.programfan.com/club/showbbs.asp?id=47252
下面是我的程序。
CLS
DIM SHARED leftbank$(10), a(10, 10), s(10), dep 'leftbank存了一些字符串,保存着左岸可能剩下的东西。a存邻接矩阵,s是栈,dep存当前深度,搜索时用。
CALL init '初始化
dep = 1 'dep初始化成1
CALL dfs(1)
SUB dfs (d) '没什么说的,依据邻接矩阵搜索
IF d = 10 THEN
FOR i = 1 TO dep - 2
PRINT i; ":"; " Leftbank:"; leftbank$(s(i))
NEXT i
PRINT "Finish!!"
END
ELSE
FOR i = 1 TO 10
IF a(d, i) THEN
a(d, i) = 0
s(dep) = i
dep = dep + 1
CALL dfs(i)
dep = dep - 1
a(d, i) = 1
END IF
NEXT
END IF
END SUB
SUB init '一些赋值
leftbank$(1) = "MWSV": leftbank$(2) = "MWS": leftbank$(3) = "MWV": leftbank$(4) = "MSV": leftbank$(5) = "MS"
leftbank$(6) = "WV": leftbank$(7) = "W": leftbank$(8) = "S": leftbank$(9) = "V": leftbank$(10) = "Finish"
a(1, 6) = 1: a(6, 3) = 1: a(3, 7) = 1: a(3, 9) = 1: a(7, 2) = 1
a(9, 4) = 1: a(2, 8) = 1: a(4, 8) = 1: a(8, 5) = 1: a(5, 10) = 1
END SUB
10 楼
公孙成 [专家分:1040] 发布于 2004-09-14 22:54:00
受faintzw委托,对init子程序作个解释,
M是man,人
w是wolf,狼
s是sheep,羊
v,vegetable,菜
a(1,6)=1的意思:
1是MWSV,6是WV
leftbank=左岸
说明左边可以从MWSV变成WV,即人把羊带过去了
或者这样说:
原来左边有 人,狼,羊,菜
现在有 狼,菜
说明人把羊带到右岸了
我来回复