人工智能实验报告Word文档下载推荐.docx

上传人:b****0 文档编号:12962474 上传时间:2022-10-01 格式:DOCX 页数:37 大小:186.49KB
下载 相关 举报
人工智能实验报告Word文档下载推荐.docx_第1页
第1页 / 共37页
人工智能实验报告Word文档下载推荐.docx_第2页
第2页 / 共37页
人工智能实验报告Word文档下载推荐.docx_第3页
第3页 / 共37页
人工智能实验报告Word文档下载推荐.docx_第4页
第4页 / 共37页
人工智能实验报告Word文档下载推荐.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

人工智能实验报告Word文档下载推荐.docx

《人工智能实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《人工智能实验报告Word文档下载推荐.docx(37页珍藏版)》请在冰豆网上搜索。

人工智能实验报告Word文档下载推荐.docx

021->

000

其中:

X1表示起始岸上的牧师人数;

X2表示起始岸上的野人人数;

X3表示小船现在位置(1表示起始岸,0表示目的岸)。

要求:

写出算法的设计思想和源程序,并以图形用户界面实现人机交互,进行输入和输出结果,如:

Pleaseinputn:

2Pleaseinputc:

2

SuccessedorFailed?

:

Successed

OptimalProcedure:

221->

四、实验组织运行要求

本实验采用集中授课形式,每个同学独立完成上述实验要求。

五、实验条件

每人一台计算机独立完成实验。

六、实验代码

Main.cpp

#include<

iostream>

#include"

RiverCrossing.h"

usingnamespacestd;

//主函数

voidmain()

{

RiverCrossing:

ShowInfo();

intn,c;

cout<

<

"

"

;

cin>

>

n;

Pleaseinputc:

c;

RiverCrossingriverCrossing(n,c);

riverCrossing.solve();

system("

pause"

);

}

RiverCrossing.h

#pragmaonce

list>

//船

classBoat

public:

staticintc;

intpastor;

//牧师

intsavage;

//野人

Boat(intpastor,intsavage);

};

//河岸状态

classState

staticintn;

intiPastor;

//牧师数量

intiSavage;

//野人数量

intiBoatAtSide;

//船所在河岸

State*pPrevious;

//前一个状态

State(intpastor,intsavage,intboatAtSide);

intgetTotalCount();

//获得此岸总人数

boolcheck();

//检查人数是否符合实际

boolisSafe();

//检查是否安全

Stateoperator+(Boat&

boat);

Stateoperator-(Boat&

booloperator==(State&

state);

 

//过河问题

classRiverCrossing

private:

std:

list<

State*>

openList,closeList;

StateendState;

boolmove(State*nowState,Boat*boat);

//进行一次决策

State*findInList(std:

&

listToCheck,State&

//检查某状态节点是否在列表中

voidprint(State*endState);

//打印结果

staticvoidShowInfo();

RiverCrossing(intn,intc);

boolsolve();

//求解问题

RiverCrossing.cpp

stack>

algorithm>

//类静态变量定义

intState:

n=0;

intBoat:

c=0;

/*=========================Methodsforclass"

Boat"

=========================*/

Boat:

Boat(intpastor,intsavage)

this->

pastor=pastor;

savage=savage;

State"

//构造函数

State:

State(intpastor,intsavage,intboatAtSide)

iPastor=pastor;

iSavage=savage;

iBoatAtSide=boatAtSide;

pPrevious=NULL;

//获取此岸总人数

getTotalCount()

returniPastor+iSavage;

//检查人数是否在0到n之间

boolState:

check()

return(iPastor>

=0&

&

iPastor<

=n&

iSavage>

=0&

iSavage<

=n);

//按照规则检查牧师得否安全

isSafe()

//此岸的安全:

x1==0||x1>

=x2

//彼岸的安全:

(n-x1)==0||(n-x1)>

=(n-x2)

//将上述条件联立后得到如下条件

return(iPastor==0||iPastor==n||iPastor==iSavage);

//重载+符号,表示船开到此岸

StateState:

operator+(Boat&

boat)

Stateret(iPastor+boat.pastor,iSavage+boat.savage,iBoatAtSide+1);

ret.pPrevious=this;

returnret;

//重载-符号,表示船从此岸开走

operator-(Boat&

Stateret(iPastor-boat.pastor,iSavage-boat.savage,iBoatAtSide-1);

//重载==符号,比较两个节点是否是相同的状态

operator==(State&

state)

return(this->

iPastor==state.iPastor&

iSavage==state.iSavage&

iBoatAtSide==state.iBoatAtSide);

/*=======================Methodsforclass"

RiverCrossing"

=======================*/

//显示信息

voidRiverCrossing:

ShowInfo()

************************************************"

endl;

牧师与野人过河问题求解"

by1040501211陈嘉生"

RiverCrossing:

RiverCrossing(intn,intc)

:

endState(0,0,0)

State:

n=n;

Boat:

c=c;

//解决问题

boolRiverCrossing:

solve()

openList.push_back(newState(State:

n,State:

n,1));

while(!

openList.empty()){

//获取一个状态为当前状态

State*nowState=openList.front();

openList.pop_front();

closeList.push_back(nowState);

//从当前状态开始决策

if(nowState->

iBoatAtSide==1){//船在此岸

//过河的人越多越好,且野人优先

intcount=nowState->

getTotalCount();

count=(Boat:

c>

=count?

count:

c);

for(intcapticy=count;

capticy>

=1;

--capticy){

for(inti=0;

i<

=capticy;

++i){

Boatboat(i,capticy-i);

if(move(nowState,&

boat))

returntrue;

}

}

}elseif(nowState->

iBoatAtSide==0){//船在彼岸

//把船开回来的人要最少,且牧师优先

for(intcapticy=1;

capticy<

=Boat:

++capticy){

Boatboat(capticy-i,i);

}

}

print(NULL);

returnfalse;

//实施一步决策,将得到的新状态添加到列表,返回是否达到目标状态

move(State*nowState,Boat*boat)

//获得下一个状态

State*des

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1