农夫过河和骑士周游(数据结构课程设计)(10页).doc
《农夫过河和骑士周游(数据结构课程设计)(10页).doc》由会员分享,可在线阅读,更多相关《农夫过河和骑士周游(数据结构课程设计)(10页).doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-农夫过河和骑士周游(数据结构课程设计)姓名:高明学号:129074151专业:软件工程2014/6/20Click here to enter text. 1:实验要求1.1实验目的掌握图的遍历问题,运用图的遍历算法解决复杂问题。掌握并应用邻接存储结构和图的深度遍历问题。培养学习使用图的相关知识解决实际问题的能力。1.2实验内容问题描述问题描述:农夫携带一只狼,一只羊,一棵白菜从和的左岸到达河的右岸,由于船只较小,农夫每次只能携带一样过河,在无人看管的情况下狼吃羊,羊吃白菜。1.3:实验输出要求 要求输出农夫携带所有东西安全过河的步骤。2:程序设计分析2.1:实验内容分析 农夫需要多次驾船往
2、返于河的左右两岸,农夫每次过河都会使农夫,狼,羊,白菜的位置发生变化。利用四元组(农夫,狼,羊,白菜)来表示各自所处于河的左岸右岸的位置,0表示河的左岸,1表示河的右岸。初始状态时(0,0,0,0)都处在河的左岸,终态是(1,1,1,1)四者都处在河的右岸。共有16种状态,但其中有些状态不安全,删除不安全的状态,将安全的状态按照合理的过河步骤联系起来.(0,0,0,0)(1,0,1,0)(0,0,1,0)(1,1,1,0) (1,0,1,1)(0,1,0,0) (0,0,0,1)(1,1,0,1)(0,1,0,1)(1,1,1,1)安全过河状态图2.2主要函数模块算法分析1:栈的相关函数PSe
3、qStack Init_SeqStack(void)/栈的初始化int Empty_SeqStack(PSeqStack s) /判断栈是否为空栈非空1表示栈空void Push_SeqStack(PSeqStack s,int x) /入栈 int Pop_SeqStack(PSeqStack s,int *x) /出栈int Size_SeqStack(PSeqStack s) /顺序栈中元素的个数void Destroy_SeqStack(PSeqStack *S) /销毁栈 2,:求结点直接后继结点个数的函数int CountAdjoin(MGraph *G,int u) 3:查找状态
4、(f,w,s,v)在无向图中的位置的函数int located(MGraph *G,int f,int w,int s,int v) 4:结点值安全状态判断函数int if_safe(int f,int w,int s,int v) 5:判断农夫过河的两个状态是否是相邻的函数int if_connected(MGraph *G,int i,int j) 6:创建农夫过河状态的无向图 void Creat_MGraph(MGraph *G) 7:广优度先遍历 遍历所有从状态下标u到状态下标v的路径函数void BFS_path(MGraph *G,int u,int v) 8:输出所有从状态下标
5、为u到状态下标为v的所有简单路径void print_path(MGraph *G,int u,int v) 2.3部分函数源代码 pathum 为状态下标u的直接后继状态下标 m表示状态下标u的直接后继结点个数:int pathMaxVertexNumMaxVertexNum; 主要结构:typedef struct int farmer;int wolf;int sheep;int vegetable;vertexType; /顶点结点类型 typedef structvertexType vertexMaxVertexNum;int edgesMaxVertexNumMaxVertexN
6、um;int vertexNum;MGraph; /邻接矩阵存储结构类型typedef struct int dataMAXSIZE;int top; /栈顶SeqStack,*PSeqStack;void BFS_path(MGraph *G,int u,int v) /深度优先遍历 从状态下标u到状态下标vint i,j,m,n; PSeqStack S;S=Init_SeqStack(); Push_SeqStack(S,v);visitedu=TRUE;/改变路径头结点的访问标志为TRUEPush_SeqStack(S,u); while(!Empty_SeqStack(S)Pop_S
7、eqStack(S,&u);m=1;for(i=0;ivertexNum;i+) /判定后继结点的个数及将其后继结点访问标志置TRUEif(G-edgesui & !visitedi) pathum=i; /将下标为U的后继结点下标赋给pathum m用来记录直接后继结点的个数visitedi=TRUE;m+;for(j=1;j2) /栈中元素个数大于2 则一直出栈Pop_SeqStack(S,&u);m=1;for(i=0;ivertexNum;i+)if(G-edgesui & !visitedi) /pathum 为状态下标u的直接后继状态下标 m表示状态下标u的后继结点个数pathum
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 农夫 过河 骑士 周游 数据结构 课程设计 10
限制150内