C++习题:野人与修道士过河问题

 
河的左岸有3个野人和3个修道士以及一条小船,修道士们想用这条小船把所有的人都运到河的右岸,但又受到以下限制:
1、修道士和野人都会划船,但船一次只能载2人;
2、在任何岸边,野人数不能超过修道士数,否则修道士将会被野人吃掉。
假定野人愿意服从任何一种过河的安排,请规划出一种确保修道士安全的过河方案。

以下是犯规情形: - 例如,对面有1个坏,船上有1好1坏,则船到对面后1好2坏,犯规。

 
#include <stdio.h>

struct record
{
	int a,b,c,d;
};

record history[1000];
int    count = 0;

// 保存记录
void Push(int a, int b, int c, int d)
{
	record* r = &history[count];
	r->a = a;
	r->b = b;
	r->c = c;
	r->d = d;
	count ++;
}

// 追溯
void Pop()
{
	count --;
}

// 压入一个相对值,表示每次运人的数目
//(2,0)(0,2)(1,1)(1,0),(0,1)
//(-2&#
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,野人修道士问题是一个经典的智力游戏,需要通过移动船和人物来完成任务。下面是一个简单的使用Qt实现的野人修道士问题的仿真软件的示例: 1. 创建Qt窗口应用程序,并添加一个主窗口。 2. 在主窗口中添加一个用于显示船和人物的QWidget。 3. 创建一个名为`Boat`的类来表示船,该类包含以下属性: - `capacity`:船的最大容量。 - `location`:船的位置(左侧或右侧)。 - `occupants`:船上的人物。 4. 创建一个名为`Character`的基类来表示人物,该类包含以下属性: - `name`:人物的名称。 - `location`:人物的位置(左侧或右侧)。 5. 创建两个继承自`Character`的子类,分别表示野人修道士,每个子类包含以下属性: - 野人: - `is_cannibal`:是否是野人。 - 修道士: - `is_priest`:是否是修道士。 6. 在主窗口中添加一个控件,用于控制游戏的开始、暂停和重置。 7. 实现游戏逻辑,包括以下步骤: - 初始化游戏,创建船和人物,并将它们放置在左侧。 - 实现游戏操作: - 移动船:如果船上没有人物,则船可以移动到另一侧。如果船上有人物,则船只能移动到另一侧,如果船的一侧有野人数目大于修道士数目,则游戏结束。 - 移动人物:人物可以移动到船上或岸上,如果岸上的一侧有野人数目大于修道士数目,则游戏结束。 - 实现游戏界面的更新:将船和人物的位置绘制到QWidget上。 8. 将游戏逻辑与游戏界面绑定,使得操作界面可以控制游戏的开始、暂停和重置。 这样,一个简单的野人修道士问题的仿真软件就完成了。您可以使用Qt提供的界面设计器来创建界面,使用C++编写游戏逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿发你好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值