题目:
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