用C语言完成传教士过河问题,传教士和野人人数都是3,每次运2人
时间: 2024-10-15 16:28:16 浏览: 36
在C语言中,我们可以创建一个简单的递归函数来解决"三名传教士和三个野人过河"的问题,也被称为经典的"汉诺塔"变种。因为每次只能运送两人,并且传教士不能单独留在对岸与野人在一起,所以我们需要考虑传教士之间的顺序以及是否允许野人在两端。
下面是一个基本的解决方案:
```c
#include <stdio.h>
// 函数声明
void move(int missionaries, int cannibals, char from, char to, char aux);
// 主函数
int main() {
move(3, 3, 'A', 'B', 'C'); // 从'A'到'B',初始位置A有3传教士和3野人
return 0;
}
// 递归函数实现
void move(int m, int c, char start, char dest, char aux) {
if (m == 0) { // 如果只有野人了,直接移动
printf("%d %c -> %c\n", c, start, dest);
move(c - 1, 0, aux, dest, start); // 移动剩下的野人
} else if (c == 0) { // 只剩传教士,同样直接移动
printf("%d %c -> %c\n", m, start, dest);
move(0, m - 1, start, aux, dest); // 移动剩下的传教士
} else { // 同时有传教士和野人
move(m - 1, c, start, aux, dest); // 先将一名传教士带到aux
printf("%d %c -> %c\n", 2, start, dest); // 然后带两个回dest
move(m, c - 1, aux, dest, start); // 最后把剩下的带回start
}
}
阅读全文