人工智能实践作业-修道士和野人过河问题:
用编程语言编写和调试一个基于深度优先搜索法的解决“野人与传教士过河”问题的程序。目的是学会运用知识表示方法和搜索策略求解一些考验智力的简单问题,熟悉简单智能算法的开发过程并理解其实现原理。

野人与传教士渡河问题:3个野人与3个传教士打算乘一条船到对岸去,该船一次最多能运2个人,在任何时候野人人数超过传教士人数,野人就会把传教士吃掉,如何用这条船把所有人安全的送到对岸?
代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll maxn=1e5+100;
ll m,c,bn;//m传教士人数,c野人数,bn船上能乘坐的人数
ll path_num;
struct node{ll m;ll c;ll b;/*node(ll aa,ll bb,ll cc):m(aa),c(bb),b(cc){m=aa,c=bb,b=cc;}*/
};
node path[maxn],A;
ll cnt=0;
map<ll,map<ll,map<ll,ll> > > mp;
bool isok(ll tm,ll tc,ll tn){if(tm<0||tm>m||tc<0||tc>c){//cout<<tm<<" "<<tc<<" "<<tn<<endl;//cout<<"1"<<endl;return false;}else if((tm>0&&tc>0&&tm<tc)||((m-tm)>0&&(c-tc)>0&&(m-tm)<(c-tc))){//cout<<(m-tm)<<" "<<(c-tc)<<endl;return false;}else if(mp[tm][tc][tn]){return false;}return true;
}
void dfs(ll mm,ll cc,ll nn){//cout<<mm<<" "<<cc<<" "<<nn<<endl;//cout<<endl;*/ll tm,tc,tn;tm=mm,tc=cc,tn=nn;if(!mm&&!cc&&!nn){path_num++;printf("第%d个路径方法\n",path_num);for(int i=1;i<=cnt;i++){printf("%lld %lld %lld\n",path[i].m,path[i].c,path[i].b);}printf("总共%d个步骤\n",cnt-2);return ;}if(nn==1){//cout<<nn<<endl;for(int i=0;i<=bn;i++){for(int j=0;j<=bn;j++){if((!i||!j||(i>=j))&&(i+j)>=1&&(i+j)<=bn){tm=mm-i,tc=cc-j,tn=nn-1;//cout<<tm<<" "<<tc<<" "<<tn<<endl;if(isok(tm,tc,tn)){//cout<<tn<<" "<<nn<<endl;mp[tm][tc][tn]=1;cnt++;path[cnt].m=tm;path[cnt].c=tc;path[cnt].b=tn;dfs(tm,tc,tn);//path[cnt](0,0,0);path[cnt].m=0;path[cnt].c=0;path[cnt].b=0;cnt--;mp[tm][tc][tn]=0;}}}}}else if(!nn){//cout<<nn<<endl;for(int i=0;i<=bn;i++){for(int j=0;j<=bn;j++){if((!i||!j||(i>=j))&&(i+j)>=1&&(i+j)<=bn){tm=mm+i,tc=cc+j,tn=nn+1;//cout<<nn<<endl;/*if(i==1&&j==1){cout<<isok(tm,tc,tn)<<endl;}*/if(isok(tm,tc,tn)){//cout<<tn<<" "<<nn<<endl;//cout<<nn<<endl;mp[tm][tc][tn]=1;cnt++;path[cnt].m=tm;path[cnt].c=tc;path[cnt].b=tn;dfs(tm,tc,tn);//path[cnt](0,0,0);path[cnt].m=0;path[cnt].c=0;path[cnt].b=0;cnt--;mp[tm][tc][tn]=0;}}}}}return ;
}
int main(){std::ios::sync_with_stdio(false);cin>>m>>c>>bn;cnt++;//path[cnt](m,c,1);path[cnt].m=m;path[cnt].c=c;path[cnt].b=1;if(m>=c){dfs(m,c,1);}if(!path_num){printf("buxing\n");}return 0;
}

人工智能实践作业-修道士和野人过河问题相关推荐

  1. 修道士和野人过河问题 A*算法 人工智能

    /** * 2014-08-25 by Liy * 修道士和野人过河问题,一共有3个修道士和3个野人,1条船 * 1.船最多可乘坐2人 * 2.两岸边 野人的数量不能多于修道士的数量,否则修道士会被吃 ...

  2. 修道士和野人问题:所有解、启发求解、简单界面

    一.作业任务 修道士和野人问题:设有三个修道士和3个野人来到河边,打算用一条船从河的左岸渡到河的右岸去.但该船每次只能装载两个人,在任何岸边野人的数目都不得超过修道士的人数,否则修道士就会被野人吃掉. ...

  3. 1. A星算法解决修道士与野人问题

    A星算法解决修道士与野人问题 1. 运行环境 CPU:I5-10400 内存:16GB 系统:Win10 64位专业版,20H2 IDE:Vistual Studio 2019专业版 2. 问题描述 ...

  4. 修道士与野人问题——C++源代码,伪代码,详细分析

    前言:这一个经典的问题,可以把问题转换成数据结构中的 图 来解决.本博客节选自我去年7月份的数据结构报告 问题描述 假设有 n 个修道士和 n 个野人准备渡河,但只有一条能容纳 c 人的小船,为了防止 ...

  5. 修道士和野人java_修道士和野人问题

    休闲时刻看看神经网络方面的书,发现了修道士和野人的问题,不禁勾引起我写算法的欲望,曾经的三只大老虎三只小老虎过河问题.人狼羊白菜过河问题.汉诺塔.哈夫曼等等各种算法瞬间在脑海中约隐约现,修道士和野人问 ...

  6. 修道士和野人java_野人与修道士问题——详细分析与C++源代码

    前言:这一个经典的问题,可以把问题转换成数据结构中的 图 来解决.本博客节选自我去年7月份的数据结构报告 问题描述 假设有 n 个修道士和 n 个野人准备渡河,但只有一条能容纳 c 人的小船,为了防止 ...

  7. 用状态空间方法求解修道士与野人问题

    目录 一.状态空间表示法回顾 1.问题状态空间的构成 2.用状态空间表示问题的步骤 二.使用状态空间法求解修道士与野人问题 1.问题描述 2.状态空间求解步骤 总结 一.状态空间表示法回顾 状态空间表 ...

  8. 2.修道士和野人问题

    2.修道士和野人问题:设有三个修道士和3个野人来到河边,打算用一条船从河的左岸渡到河的右岸去.但该船每次只能装载两个人,在任何岸边野人的数目都不得超过修道士的人数,否则修道士就会被野人吃掉.假设野人服 ...

  9. 使用dfs求解修道士和野人问题

    原文链接: 使用dfs求解修道士和野人问题 上一篇: js Set 的使用 下一篇: VMware 挂载U盘 1.问题描述 :这是一个古典问题.假设有n个道士和n个野人准备渡河.但只有一条能容纳c人的 ...

最新文章

  1. 使用windows.name解决js跨域数据通信
  2. php sql报错1054 in,sql语句拼接 报错
  3. 稀疏矩阵的转置c语言程序,程序有问题求大神,稀疏矩阵转置
  4. python tkinter下载器_下载小说还要去找网站?Python使用tkinter打造一个小说下载器...
  5. RHEL7.0手动安装
  6. 7-10 统计字符出现次数 (20 point(s))
  7. python matplotlib调整图像比例
  8. Visio软件方案UML选择
  9. FT232RL FTDI USB转串口芯片SSOP28 国产替代
  10. 模拟电路笔记(一)晶体二极管及其应用
  11. JavaScript ES6新特性
  12. 私域流量运营和微商有什么区别?
  13. 沉睡者IT - 月赚几千的创业项目思路,抖音文案号网赚项目
  14. 字幕集合保存为srt文件
  15. 蓝色理想的flex教材不能在flex Development做不能使用,我整理一下供初学者参考
  16. 9.1 DEP机制的保护原理
  17. Cz工具集使用介绍 - 规范Git提交说明
  18. Windows10神州网信版的安装
  19. 计算机软件优质课,计算机课公开课ppt
  20. QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之05【EC20模组TCP/IP模块AT指令说明】

热门文章

  1. HYPEREAL带来突破性的深度感知摄像头,在虚拟世界睁开真实之眼
  2. 云计算 第四章 微软云计算 Windows Azure
  3. 证件照换背景,excel2步搞定!
  4. VTA(Versatile Tensor Accelerator)阅读笔记
  5. 全球排名前四的眼药水,第一款来自欧洲老牌安瞧AGEPHA Pharma,眼科医生自留!
  6. Android SurfaceView、TextureView区别
  7. 关于Inter CPU的一些认识
  8. 数量金融学(3):Markowitz均值-方差模型
  9. 美国大学计算机专业排名2014,2014年USNews美国大学计算机专业研究生排名
  10. jsp_servle(3)