野人与传教士过河java_传教士和野人过河(经典MC问题)

这个问题本来是《人工智能技术导论》第三章的课后题,今天上午考试正巧考到了这道题,要我们画状态转换图,我之前思考过一点,所以写出的状态表示应该没有问题,但这些状态太多了.......,十来种状态直接给我干懵逼了,两个小时的考试,差不多得有一个小时在推导状态转换关系,最后整个考场就剩下我和谭神两个人了,这里写下博客,整理一下这个问题。

网上搜索发现这个博主的做法和我的做法大致一样的,他最后给出了C++的实现方式。这篇博客状态分析部分就主要参考https://www.cnblogs.com/guanghe/p/5485800.html

后面再附上PROLOG程序的解决方案。

一、问题重述

在河的左岸有N个传教士、N个野人和一条船,传教士们想用这条船把所有人都运过河去,但有以下条件限制:

(1)修道士和野人都会划船,但船每次最多只能运K个人;

(2)在任何岸边野人数目都不能超过修道士,否则修道士会被野人吃掉。

假定野人会服从任何一种过河安排,请规划出一个确保修道士安全过河的计划。

二、问题分析

1、约束条件

① M≧C 任何时刻两岸、船上都必须满足传教士人数不少于野人数(M=0时除外,既没有传教士)

② M+C≦K 船上人数限制在K以内

2、求解

传教士与野人全部安全渡到对岸的解决方案

三、状态表示

设N=3,K=2(三个M和三个C,每次渡河二人以下)

L:左岸,R:右岸,

B:是否有船(0:无船,1:有船)

定义:用三元组(ML,CL,BL)表示左岸状态,其中:

0≦ML,CL≦3,BL∈{0,1}

如:(0,3,1)表示左岸有三个野人,船在左岸。

从(3,3,1)到(0,0,0)的状态转换

状态空间:32 种状态,其中:

12种不合理状态:如(1,0,1)说明右岸有2个M,3个C;

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值