




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上农夫过河问题1 问题描述一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸。他要把这些东西全部运到北岸。他面前只有一条小船,船只能容下他和一件物品,另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊不能吃白菜,否则狼会吃羊,羊会吃白菜,所以农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开,而狼不吃白菜。要求:利用图的存储结构和图的搜索算法,求出农夫将所有的东西运过河的方案。2 需求分析2.1规定程序功能本题要解决的问题就是农夫如何带着狼、羊、白菜安全过河。要求是船只能容下他和一件物品,另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊不能吃白菜,否则狼会吃羊
2、,羊会吃白菜,所以农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开,而狼不吃白菜。2.2输入和输出形式本程序自动完成所有情况的输入,不需要人为的输入。然后根据程序里面调用相应函数模块可得到一种过河方案,然后自行输出。输出的是农夫过河每一步的方案,即每一步中农夫采取的行动。 3 概要设计3.1数据结构的设计题目要求用图的存储结构,所以要想办法将农夫、狼、羊、白菜每一步的状态用结点表示,他们状态的改变到下一个结点可行,则在两条结点中加一条边。但是每个结点包含四个量,如果他们每个都各自用一个结构体表示,则图形就变得相当的繁琐,因此想到一个简单的结局办法。河的两岸是两个不同的变量,刚好可以用0和
3、1表示,那么四个状态量都用0和1则可表示他们每一步所处的位置,也就能明白农夫每次是怎么过河的。3.2算法的设计本程序可以分成四个模块,分别是:找到所有情况的点、从中挑选出满足题意的点、创建满足题意的点之间的边、通过图的深度优先遍历找到过河方案。各模块之间的关系图如下:找到所有情况的点(即0000-1111共16种组合)挑出符合题意的点(即农夫不在时,狼不和羊、羊不和菜在一起)找到符合题意点之间边的关系通过图的深度优先遍历找到过河方案每个模块函数为:void input_vertex(DataType *vertex) /所有情况顶点的输入int right_vertex(DataType *v
4、ertex,DataType *vertex1) /选出满足题意的顶点int right_edge(DataType *vertex,RowCol *edge,int n) /选出满足题意的边void DepthFSearch(AdjLGraph G,int v,int visited,DataType vert,int *a)/图的深度优先遍历3.3抽象数据类型的设计 本题采用的是图,因此要用到定义图的结构体 typedef structint f;/农夫int w;/狼int s;/羊int c;/菜DataType;/结点信息结构体定义typedef structint row;int
5、col;RowCol;/边信息结构体定义typedef struct Nodeint dest;/邻接边的弧头结点序号struct Node *next;Edge;/邻接边单链表的结点结构体typedef struct DataType data; int sorce;/邻接边弧尾结点序号 Edge *adj;/邻接边的头指针AdjLHeight;/数组的数据元素类型结构体typedef struct AdjLHeight a100;/邻接表数组 int numOfVerts;/结点个数 int numOfEdges;/边个数AdjLGraph;/邻接表结构体4 详细设计4.1算法的主要思想为
6、简化结点,将农夫、狼、羊、白菜用0和1两种状态量表示,0表示在河的南岸,也就是初始所在的河岸。1表示在河的北岸,即渡过河到达的对岸。那么初始状态即为0000,将其变为1111的中间状态量即为过河方案。那么就从16种所有情况的顶点中选择符合题意的结点,因为并不是所有点都满足题意,限制要求为农夫每次最多可带狼、羊、白菜中的一个过河,农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开。选出所有满足题意的结点后,就要构造边,边即为符合题意两结点之间的连接。中间有边的两结点必须符合农夫的状态在变,并且农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开。选出所有符合题意的结点和边后就构成了图,采用
7、邻接表的存储结构,然后通过图的深度优先遍历,将所有满足题意的结点遍历一遍并输出,到1111时即输出了过河方案的全部步骤。4.2算法的实现 存储16种全部情况以供挑选。 void inputdian(DataType *d) int f,w,s,c,i=0; for(f=0;f<=1;f+) for(w=0;w<=1;w+) for(s=0;s<=1;s+) for(c=0;c<=1;c+) di.f=f; di.w=w; di.s=s; di.c=c; i+; 选出符合题意的所有结点int rdian(DataType *d,DataType *d2) int i; i
8、nt num=0; for(i=0;i<16;i+) if(!(di.f!=di.s&&(di.w=di.s|di.s=di.c)d2num+=di; return num; 选出符合题意的结点之间的边int rbian(DataType *d,RowCol *edge,int n) int df,dw,ds,dc; int i=0,j=0,num=0; for(i=0;i<n;i+) for(j=0;j<n;j+) df=di.f-dj.f;dw=abs(di.w-dj.w);ds=abs(di.s-dj.s);dc=abs(di.c-dj.c);if(df
9、!=0&&(dw+ds+dc)<=1)edgenum.col=i;edgenum+.row=j; return num; 图的深度优先遍历void DepthFSearch(AdjLGraph G,int v,int visited,DataType d1,int *s) int w; d1(*s)=G.av.data; visitedv=1; (*s)+; w=GetFirstVex(G,v); while(w!=-1) if(!visitedw)DepthFSearch(G,w,visited,d1,s);w=GetNextVex(G,v,w); 4.3函数的调用关系图inputdian(d);nd=rdian(d,rd);nb=rbian(rd,edge,nd);CreatGraph(&am
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度专利技术价格保密合同书
- 2025年度休闲渔业发展鱼塘承包经营合同
- 2025年度护肤品专业渠道代理商招募合同
- 2025年度业主起诉解除物业服务合同法律依据与实践应用
- 2025年度商业街场地租赁合同解除书
- 2025年度大型活动安全预案人身免责及应急处理合同
- 2025年度山地滑雪场租赁管理服务协议
- 2025年广东环境保护工程职业学院单招职业适应性测试题库含答案
- 2025年度智能公寓简易版租赁合同
- 2025年度教育培训机构中途入股投资及分红合作协议
- 产品结构设计概述课件
- 八年级下综合实践教案全套
- 胸痹心痛中医诊疗方案及临床路径
- 第8课《山山水水》教学设计(新人教版小学美术六年级上册)
- word 公章 模板
- 泛读2unit2-music
- 世界技能大赛PPT幻灯片课件(PPT 21页)
- 中学生防溺水安全教育课件(PPT 44页)
- Python程序设计ppt课件完整版
- T∕ZSQX 008-2020 建设工程全过程质量行为导则
- 《腹膜透析》ppt课件
评论
0/150
提交评论