数据结构课程设计地图着色.docx

上传人:b****8 文档编号:27636545 上传时间:2023-07-03 格式:DOCX 页数:17 大小:56.39KB
下载 相关 举报
数据结构课程设计地图着色.docx_第1页
第1页 / 共17页
数据结构课程设计地图着色.docx_第2页
第2页 / 共17页
数据结构课程设计地图着色.docx_第3页
第3页 / 共17页
数据结构课程设计地图着色.docx_第4页
第4页 / 共17页
数据结构课程设计地图着色.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数据结构课程设计地图着色.docx

《数据结构课程设计地图着色.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计地图着色.docx(17页珍藏版)》请在冰豆网上搜索。

数据结构课程设计地图着色.docx

数据结构课程设计地图着色

 

院系:

计算机科学学院

专业:

计算机科学与技术

年级:

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年月日

备注:

源代码附后,源代码要求有注释说明

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

当前位置:首页 > 人文社科 > 法律资料

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

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