牧师和野人过河的问题,请高手指点我的程序错误(cpp&python)

hugsnow hugsnow 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
CPP 代码

#include <stdio.h>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;
bool ok(int a,int b);
bool guoqu(int a,int b,vector < int > c);
bool guolai(int a,int b,vector < int > c);
const int ren=3;
const int sheep=3;
int main(int argc, char **argv)
{
vector < int > v;
v.push_back(33);
guoqu(3,3,v);
system("pause");
return 0;
}
bool guoqu(int a,int b,vector < int > c){
//if(a==0&&b==0)
// return true;
for(int i=0;i<=a;i++)
for(int j=0;j<=b;j++)
if(i+j>0&&i+j<=sheep){
int a1,b1,a2,b2,d;
a1=a-i;
b1=b-j;
a2=ren-a1;
b2=ren-b1;
d=a1*10+b1;
if(find(c.begin(),c.end(),d)==c.end()&&ok(a1,b1)){
c.push_back(d);
if(guolai(a2,b2,c)){
cout<<c.size()-1<<".运"<<i<<"牧师和"<<j<<"野人过去,"
<<"这边"<<a1<<b1<<",那边"<<a2<<b2<<endl;
return true;
}
}
}
return false;
}
bool guolai(int a,int b,vector < int > c){
if(a==3&&b==3)
return true;
for(int i=0;i<=a;i++)
for(int j=0;j<=b;j++)
if(i+j>0&&i+j<=sheep){
int a1,b1,a2,b2,a3,b3,d;
a1=a-i;
b1=b-j;
a2=ren-a1;
b2=ren-b1;
d=a2*10+b2;
if(find(c.begin(),c.end(),d)==c.end()&&ok(a2,b2)){
c.push_back(d);
if(guoqu(a2,b2,c)){
cout<<c.size()-1<<".运"<<i<<"牧师和"<<j<<"野人过来,"
<<"这边"<<a2<<b2<<",那边"<<a1<<b1<<endl;
return true;
}
}
}
return false;
}

bool ok(int a,int b){
return a==3||a==0||a==b;
}

Python 代码:

ren=3;
chuan=2;
def ok(a,b):
(a==3) or (a==0) or (a==b)

def guoqu(a,b,c):
for ms in range(a+1):
for yr in range(b+1):
if (ms+yr>0) and (ms+yr<=chuan):
zbms=a-ms
zbyr=b-yr
nbms=ren-zbms
nbyr=ren-zbyr
shu=zbms*10+zbyr
if (shu not in c) and (ok(zbms,zbyr)):
if guolai(nbms,nbyr,c+[shu]):
print "%d and %d,this:%d%d,that:%d%d"%(ms,yr,zbms,zbyr,nbms,nbyr)
return True
return False

def guolai(a,b,c):
if (a==3) and (b==3):
return True
for ms in range(a+1):
for yr in range(b+1):
if (ms+yr>0) and (ms+yr<=chuan):
nbms=a-ms
nbyr=b-yr
zbms=ren-nbms
zbyr=ren-nbyr
shu=zbms*10+zbyr
if (shu not in c) and (ok(zbms,zbyr)):
if guoqu(zbms,zbyr,c+[shu]):
print "%d and %d,this:%d%d,that:%d%d"%(ms,yr,zbms,zbyr,nbms,nbyr)
return True
return False

guoqu(0,2,[33])
...全文

相关推荐

C++菱形继承问题解析与组合优于继承的设计实践

在面向对象编程中,继承是实现代码复用和多态性的核心机制,它通过建立‘是一个’的关系来扩展基类功能。然而,当继承层次变得复杂,特别是出现菱形继承结构时,会导致数据冗余和访问二义性等经典问题。C++虽然提供了虚继承作为解决方案,但其引入了额外的复杂性和性能开销。从软件工程实践角度看,组合作为一种更灵活的代码复用方式,通过建立‘有一个’的关系,将已有类作为成员变量来构建新类,能够有效降低耦合度、提高代码的可维护性和扩展性。组合技术广泛应用于策略模式、桥接模式等设计模式中,支持运行时动态变更行为,避免了因滥用继承而

weixin_34037173

C# 委托详解

前言: 今天去面试的时候,面试官问到C#中委托和事件的使用,以及你在游戏中会怎么使用它们。这个问题给了我一个启发:在学习新的技术点时,一定要多考虑该如何具体使用它们,而不是一味的学习知识点,正所谓:学以致用。...

TJ

极简编程语言史,在很久很久以前……

1800 年 Joseph Marie Jacquard 在梭织机上使用穿孔卡片,创建出第一个“重量级”的多任务处理单元。 1842 年 Ada Lovelace 在笔记本上写了一些计算机指令一样的东西,后来被公认是世界上的第一道计算机程序,只是那时计算机还没有问世。 **海风教育在线辅导0元一对一试听课等你来领取,领取课程方法: 1、私信留下您的手机号和姓名,需要补习的科目。 2、也可以在海风教...

weixin_43932460

告别单机寂寞!手把手教你给魔兽单机版添加AI队友(基于AzerothCore+NPCBots)

本文详细介绍了如何通过AzerothCore服务端和NPCBots模块为魔兽单机版添加AI队友,解决单人游戏的孤独感。从环境准备、模块获取、编译部署到数据库配置和游戏内操作,手把手教你打造智能战友团,提升副本体验和战斗策略乐趣。

阳光那么灿烂的

技术转移机构如何基于数据提升项目撮合精准度?.docx

技术转移机构如何基于数据提升项目撮合精准度?

BIZKEEN
评论 4
收藏 已收藏
分享
返回顶部
hugsnow
数据结构与算法 33,026 成员 35,334 内容