wizyoung / missionary-and-cannibals-problem-in-Python

solve the M_C problem in Python(用Python解决传教士野人过河问题)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

missionary-and-cannibals-problem-in-Python

用Python语言解决传教士野人过河问题。

最近做人工智能实验报告,尝试用新学的Python语言解决传教士野人过河问题。

问题描述

有三个传教士和三个野人一起来到河边准备渡河,河边有一条空船,且传教士和野人都会划船,但每次最多可供两人乘渡。河的任何一岸以及船上一旦出现野人人数超过传教士人数,野人就会把传教士吃掉。为安全 地渡河,传教士应该如何规划渡河方案?试给出该问题的状态图表示,并编程求解之。

若传教士和野人的数码均为 5 人,渡船至多可乘 3 人,请定义一个启发函 数,并给出相应的搜索树。

解题思路

设 M 为传教士总人数,C 为野人总人数,K 为每条船乘坐人数,船的状态表示为 b。

在 M=3,C=3,K=2 情况下:

令 m 表示在左岸的传教士人数,c 表示在左岸的野人数,b=1 表示船在左岸, b=0 表示船在右岸。

因此可用(m, c, b)表述当前状态。

则,初始状态为(3, 3, 1), 目标状态为(0, 0, 0)。

渡河时,为确保安全,需满足:

0 ≤ m ≤ 3,0 ≤ c ≤ 3, b ∈ {0,1}, m > c(m 不为 0 时), 3-m > 3-c(m 不为 3 时)


代码中传教士人数M,野人人数C,船能坐K人,均可修改。 具体实现见代码啦

About

solve the M_C problem in Python(用Python解决传教士野人过河问题)


Languages

Language:Python 100.0%