数据结构课程设计地图着色.docx
- 文档编号:15331081
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:17
- 大小:56.39KB
数据结构课程设计地图着色.docx
《数据结构课程设计地图着色.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计地图着色.docx(17页珍藏版)》请在冰点文库上搜索。
数据结构课程设计地图着色
院系:
计算机科学学院
专业:
计算机科学与技术
年级:
2011级
课程名称:
人工智能导论
学号:
11061151
姓名:
冶湖明
指导教师:
郑波尽
2013年12月11日
年级
2011级
班号
计科5班
学号
11061151
专业
计算机科学与技术
姓名
冶湖明
实验名称
实验一:
水壶问题
实验
类型
设计型
综合型
创新型
√
实
验
目
的
或
要
求
实验题目:
水壶问题:
(1)有一根水管,有无限的水
(2)有两个水壶,分别是3升和4升
(3)请分别量出1~10升水
实
验
原
理
(
算
法
流
程
)
实验步骤:
1、程序代码
#include
#include
main()
{
intL3=3;
intL4=4;
intL1_3,L1_4,L;
inta;
printf("请输入你想要得到多少水(单位:
升):
");
scanf("%d",&a);
do{
printf("请输入你想要得到多少水(单位:
升):
");
scanf("%d",&a);
if(a==1)
{
printf("将4升的水壶装满水,向3升的水壶中倒入3升水,剩下1升倒入容器,即可得到!
\n",a);
}
elseif(a%3==0)
{
L1_3=a/3;
printf("你可以向容器中倒入%d桶3升的水壶得到!
\n",L1_3);
}
elseif(a%4==0)
{
L1_4=a/4;
printf("你可以向容器中倒入%d桶4升的水壶得到!
\n",L1_4);
}
elseif(a%3==1)
{
L1_3=a/3;
printf("你可以向容器中倒入%d桶3升的水壶的水,然后再将4升的水壶装满水,向3升的水壶中倒入3升水,剩下1升倒入容器,即可得到!
\n",L1_3);
}
elseif(a==2)
{
L1_3=2;
printf("将4升的水壶装满水,向3升的水壶中倒入3升水,剩下1升倒入容器,重复此步骤两次即可得到!
\n",L1_3);
}
elseif(a%4==1)
{
L1_4=a/4;
printf("你可以向容器中倒入%d桶4升的水壶的水,然后再将4升的水壶装满水,向3升的水壶中倒入3升水,剩下1升倒入容器,即可得到!
\n",L1_4);
}
}while(a>0);
}
2、程序运行结果截图
组
内
分
工
(
可
选
)
无
实
验
结
果
分
析
及
心
得
体
会
实验心得:
通过这次测试技术的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅.
成
绩
评
定
教师签名:
2013年月日
备注:
源代码附后,源代码要求有注释说明
年级
2011级
班号
计科5班
学号
11061151
专业
计算机科学与技术
姓名
冶湖明
实验名称
实验二:
传教士野人问题
实验
类型
设计型
综合型
创新型
√
实
验
目
的
或
要
求
题目:
传教士人数M,野人C,M≥C,开始都在岸左边,
①船只能载两人,传教士和野人都会划船
②两岸边保证野人人数不能大于传教士人数,否则传教士将被野人吃掉
把所有人都送过河,设计方案,要求编程实现。
实
验
原
理
(
算
法
流
程
)
实验步骤:
1、程序代码
#include
#include
#defineSTEP_MAX20//来回过河的次数
#defineKIND_NUM3//每个种类的数量
#defineBOAT_NUM2//船的载重量
typedefenum
{
BOAT_THIS,//船在本岸
BOAT_THAT,//船在对岸
}boat_t;
typedefenum
{
ROAD_GO,//过河
ROAD_COME,//回来
}road_t;
typedefstruct
{
intye;//对岸野人数量
intman;//对岸传教士数量
boat_tboat;//船是否在对岸
}state_t;//一种局面
typedefstruct
{
intye;//野人过河数量
intman;//传教士过河的数量
road_troad;//回来或过河
}step_t;//一个步骤
state_tstates[STEP_MAX]={0};
step_tsteps[STEP_MAX]={0};
//判断所有的野人和传教士是否都到了对岸
boolfinal(state_ts)
{
conststate_tcs=
{
KIND_NUM,
KIND_NUM,
BOAT_THAT
};
if(memcmp(&cs,&s,sizeof(state_t))==0)
{
returntrue;
}
returnfalse;
}
//是否会发生野人杀传教士
boolbad(state_ts)
{
if(((KIND_NUM-s.ye)>(KIND_NUM-s.man)&&(KIND_NUM-s.man)>0)
||(s.ye>s.man&&s.man>0))
{
returntrue;
}
returnfalse;
}
//第n种局面是否跟前面的相重复
boolrepeat(state_ts[],intn)
{
inti;
for(i=0;i {//已经有这种情况了 if(memcmp(&states[i],&states[n],sizeof(states[i]))==0) { returntrue; } } returnfalse; } voidoutput(step_tsteps[STEP_MAX],intn) { char*kinds[KIND_NUM]={"野人","传教士"}; char*routine[2]={"过河.","回来."}; inti; for(i=0;i { if((steps[i].ye*steps[i].man)>0) { printf("%d个%s和%d个%s%s\n",steps[i].ye,kinds[0], steps[i].man,kinds[1],routine[steps[i].road]); } elseif(steps[i].ye>0) { printf("%d个%s%s\n",steps[i].ye,kinds[0], routine[steps[i].road]); } elseif(steps[i].man>0) { printf("%d个%s%s\n",steps[i].man,kinds[1], routine[steps[i].road]); } } printf("\n"); } //搜索过河方案(n表示过河次数) voidsearch(intn) { inti,j; if(n>STEP_MAX) {//步数限制太少了 printf("StepOverflow! "); return; } if(final(states[n])) {//都到对岸了 output(steps,n); return; } if(bad(states[n])) {//发生了野人杀传教士了 return; } if(repeat(states,n)) {//与前面的局面相重复了 return; } if(states[n].boat==BOAT_THIS) {//船在本岸 for(i=0;i<=BOAT_NUM&&i<=(KIND_NUM-states[n].ye);i++) for(j=0;j<=BOAT_NUM-i&&j<=(KIND_NUM-states[n].man);j++) { if(i==0&&j==0) { continue; } steps[n].ye=i; steps[n].man=j; steps[n].road=ROAD_GO; memcpy(&states[n+1],&states[n],sizeof(state_t)); states[n+1].ye+=i; states[n+1].man+=j; states[n+1].boat=BOAT_THAT; search(n+1); } } else { for(i=0;i<=BOAT_NUM&&i<=states[n].ye;i++) for(j=0;j<=BOAT_NUM-i&&j<=states[n].man;j++) { if(i==0&&j==0) { continue; } steps[n].ye=i; steps[n].man=j; steps[n].road=ROAD_COME; memcpy(&states[n+1],&states[n],sizeof(state_t)); states[n+1].ye-=i; states[n+1].man-=j; states[n+1].boat=BOAT_THIS; search(n+1); } } } intmain() { search(0); return0; } 2、程序运行结果截图 组 内 分 工 ( 可 选 ) 无 实 验 结 果 分 析 及 心 得 体 会 实验心得: 通过这次测试技术的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅. 成 绩 评 定 教师签名: 2013年月日 备注: 源代码附后,源代码要求有注释说明 年级 2011级 班号 计科5班 学号 11061151 专业 计算机科学与技术 姓名 冶湖明 实验名称 实验三: 演化算法 实验 类型 设计型 综合型 创新型 √ 实 验 目 的 或 要 求 题目: 根据以下MATLAB程序编写C语言代码 pop=rand(20,1)*10;%随机产生初始群体 objvalue=10*sin(5*pop)+7*cos(4*pop);%//10*sin(5*x)+7*cos(4*x); fori=1: 200%200为迭代次数 forj=1: 19 a=rand(); x=a*pop(j)+(1-a)*pop(j+1); obj=10*sin(5*x)+7*cos(4*x); ifobj>objvalue(j) pop(j)=x; objvalue(j)=obj; end end end 实 验 原 理 ( 算 法 流 程 ) 实验步骤: 1、程序代码 #include #include #include #include main() { inti,j; floata,x,obj; floatobjvalue[20],pop[20]; srand((int)time(0)); for(j=0;j<20;j++) { pop[j]=((float)10.0*rand()/(RAND_MAX)); objvalue[j]=10*sin(5*pop[j])+7*cos(4*pop[j]); } for(i=0;i<=200;i++) { for(j=0;j<20;j++) { a=((float)rand()/(RAND_MAX)); x=a*pop[j]+(1-a)*pop[(j+1)%20]; obj=10*sin(5*x)+7*cos(4*x); if(obj>objvalue[j]) { pop[j]=x; objvalue[j]=obj; } printf("\tx=%4f",x); printf("\tobj=%4f\n",obj); } } 2、程序运行结果截图 组 内 分 工 ( 可 选 ) 无 实 验 结 果 分 析 及 心 得 体 会 实验心得: 通过这次测试技术的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅. 成 绩 评 定 教师签名: 2013年月日 备注: 源代码附后,源代码要求有注释说明
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 地图 着色