人狼羊菜过河 题解

题目: 

L2-3 人狼羊菜过河(*) 

一个人要将一匹狼、一只羊、一筐菜运到河对岸,但是他的船太小了,一次只能带一样过河。当他不在时,狼要吃羊、羊要吃菜。他怎样才能安全地将狼、羊、菜都运过河呢?

请编写程序,找出过河的全部方案。

用 4 个字母分别表示人、狼、羊、菜的状态:

  • 用 M 表示人在,用 . 表示人不在
  • 用 W 表示狼在,用 . 表示狼不在
  • 用 G 表示羊在,用 . 表示羊不在
  • 用 C 表示菜在,用 . 表示菜不在
  • 用 -> 表示船将从左岸去右岸,用 <- 表示船将从右岸去左岸。

举例说明:

若人狼羊菜全在左岸,则状态表示为

MWGC -> ....

 若人将羊运到右岸,左岸只剩狼和菜,则状态表示为

.W.C <- M.G.

输入格式

初始状态
终止状态 

输出格式

若有解,则输出所有解法。
每一个解法由若干行组成,每行表示一个状态。
不同的解法之间空一行。
若无解,则输出 None。 

要求:输出的解法中不允许出现两行相同的状态。

输入样例1

MWGC -> ....
.... <- MWGC

输出样例1 

MWGC -> ....
.W.C <- M.G.
MW.C -> ..G.
...C <- MWG.
M.GC -> .W..
..G. <- MW.C
M.G. -> .W.C
.... <- MWGC

MWGC -> ....
.W.C <- M.G.
MW.C -> ..G.
.W.. <- M.GC
MWG. -> ...C
..G. <- MW.C
M.G. -> .W.C
.... <- MWGC

输入样例2

.W.. <- M.GC
M.GC -> .W..

输出样例2 

.W.. <- M.GC
MWG. -> ...C
..G. <- MW.C
M.GC -> .W..

.W.. <- M.GC
MW.C -> ..G.
...C <- MWG.
M.GC -> .W..

 输入样例3

MWG. -> ...C
MWG. -> ...C

输出样例3 


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值