人鸡狗过河问题 c++编程
更新时间:2023-12-24 05:53:01 阅读量: 教育文库 文档下载
- 鸡狗米过河问题推荐度:
- 相关推荐
#include
typedef struct {
int a, b, c, d; } Vector;
void Add(Vector *vector1, Vector vector2, Vector* resultVector) {
resultVector->a = (vector1->a + vector2.a) % 2; resultVector->b = (vector1->b + vector2.b) % 2; resultVector->c = (vector1->c + vector2.c) % 2; resultVector->d = (vector1->d + vector2.d) % 2; }
typedef struct myNode {
Vector* stateVector; myNode* childs[4]; myNode* parent; } Node;
void Copy(Vector* targetVector, Vector* sourceVector) {
targetVector->a = sourceVector->a; targetVector->b = sourceVector->b; targetVector->c = sourceVector->c; targetVector->d = sourceVector->d; }
bool Equal(Vector* vector1, Vector* vector2) {
return vector1->a == vector2->a && vector1->b == vector2->b && vector1->c == vector2->c && vector1->d == vector2->d; }
bool IsStateAllowed(Vector* stateVector, Vector* allowedStateVectors) {
for (int i = 0; i < 10 ; i++) {
if (Equal(stateVector, &allowedStateVectors[i])) {
return true; } }
return false; }
bool HasExistInTree(Vector* targetVector, Node* tree) {
if (Equal(targetVector, tree->stateVector)) return true; else {
for (int i = 0; i < 4 ; i++) {
if (tree->childs[i] != NULL &&
HasExistInTree(targetVector, tree->childs[i])) {
return true; } } }
return false; }
void PrintAnswer(Node* node) {
while (node != NULL) {
printf(\ node->stateVector->c, node->stateVector->d); node = node->parent; }
printf(\}
void GenerateTree(Node* p, Vector* overRiverVectors, Node* tree, Vector* endState, Vector* allowedStateVectors) {
Vector* resultVector = (Vector*)malloc(sizeof(Vector)); for (int i = 0; i < 4 ; i++) {
Add(p->stateVector, overRiverVectors[i], resultVector);
if (!HasExistInTree(resultVector, tree) &&
IsStateAllowed(resultVector, allowedStateVectors)) {
p->childs[i] = (Node*)malloc(sizeof(Node));
p->childs[i]->stateVector = (Vector*)malloc(sizeof(Vector));
Copy(p->childs[i]->stateVector, resultVector); for (int j = 0; j < 4; j++) {
p->childs[i]->childs[j] = NULL; }
p->childs[i]->parent = p; } else {
p->childs[i] = NULL; } }
free(resultVector);
for (i = 0; i < 4 ; i++) {
if (p->childs[i] != NULL) {
if(!Equal(p->childs[i]->stateVector, endState)) {
GenerateTree(p->childs[i], overRiverVectors, tree, endState, allowedStateVectors); } else {
PrintAnswer(p->childs[i]); } } } }
void FreeTree(Node* node) {
if (node != NULL) {
for (int i = 0; i < 4 ; i++) {
FreeTree(node->childs[i]); }
free(node->stateVector); free(node); } }
void main() {
//渡河向量集合
Vector overRiverVectors[4] = {{1, 0, 0, 0}, {1, 1, 0, 0}, {1, 0, 1, 0}, {1, 0, 0, 1}};
//允许向量集合
Vector allowedStateVectors[10]=
{{1, 1, 1, 1}, {1, 1, 1, 0}, {1, 1, 0, 1}, {1, 0, 1, 1}, {1, 0, 1, 0}, {0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 1, 0, 0}, {0, 1, 0, 1}};
Vector* initialState = (Vector*)malloc(sizeof(Vector)); initialState->a = 1; initialState->b = 1; initialState->c = 1; initialState->d = 1;
Vector* endState = (Vector*)malloc(sizeof(Vector)); endState->a = 0; endState->b = 0; endState->c = 0; endState->d = 0;
Node* p = (Node*)malloc(sizeof(Node));
Vector* stateVector = (Vector*)malloc(sizeof(Vector)); Copy(stateVector, initialState); p->stateVector = stateVector; for (int i = 0; i < 4 ; i++) {
p->childs[i] = NULL; }
p->parent = NULL;
GenerateTree(p, overRiverVectors, p, endState, allowedStateVectors);
FreeTree(p); free(initialState); free(endState); }
正在阅读:
人鸡狗过河问题 c++编程12-24
传输光缆线路施工合同05-03
关于阅读的作文:阅读走进我的世界_800字_作文网05-20
小学儿童思维发展的特点10-26
各类楼梯间及消防电梯的设置原则--建筑师多年总结的东西05-29
可爱的鸽子作文450字07-04
弟弟的手作文500字07-12
什么的自述作文450字06-16
第3节物质的量 气体摩尔体积11-29
建设工程施工合同风险及合理规避07-18
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- c++
- 过河
- 编程
- 问题
- 幸福的鸭子读后感10篇(优秀版)
- 2011年高考生物复习教案:第19讲 人体的稳态(人教版)03
- 大学语文答案( 南京大学网络教育学院期末考试试卷)2013-06-23
- 突发公共卫生事件分级内涵的释义
- 《现代教育技术》练习题库参考答案
- 中心组团景观与绿地系统规划 - 图文
- Excel公式百科
- 建筑自动消防设施及消防控制室规范化管理标准p
- 哈尔滨市城市总体规划 - 图文
- 二年级数学上册期中检测质量分析
- 黑龙江省住房和城乡建设厅关于组织开展全省建设工程质量和安全监
- 2018届中考英语二轮复习《第11讲词语运用专题》讲义
- 网上商店与实体店竞争能力的对比分析
- 漫谈新闻工作者的职业道德
- 第四章学案
- 二十世纪六七十年代美国婚姻家庭的发展变化
- 2017年临床助理医师实践技能考试真题6.17日晚20时
- ELISA临床检测项目列表
- 社会治安综合治理工作实施方案
- 未来版六年级上册品德与社会教案全册