收藏 分享(赏)

数据结构课程设计-农夫过河-实验源码-实验报告.doc

上传人:精品资料 文档编号:10773743 上传时间:2020-01-08 格式:DOC 页数:15 大小:85.13KB
下载 相关 举报
数据结构课程设计-农夫过河-实验源码-实验报告.doc_第1页
第1页 / 共15页
数据结构课程设计-农夫过河-实验源码-实验报告.doc_第2页
第2页 / 共15页
数据结构课程设计-农夫过河-实验源码-实验报告.doc_第3页
第3页 / 共15页
数据结构课程设计-农夫过河-实验源码-实验报告.doc_第4页
第4页 / 共15页
数据结构课程设计-农夫过河-实验源码-实验报告.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、一、需求分析描述 1、针对实现整个过程需要多步,不同步骤中各个事物所处位置不同的情况,可定义一个结构体来实现对四个对象狼、羊、白菜和农夫的表示。对于起始岸和目的岸,可以用 0 或者 1 来表示,以实现在程序设计中的简便性。2、题目要求给出四种事物的过河步骤,没有对先后顺序进行约束,这就需要给各个事物依次进行编号,然后依次试探,若试探成功,进行下一步试探。这就需要使用循环或者递归算法,避免随机盲目运算且保证每种情况均试探到。3、题目要求求出农夫带一只羊,一条狼和一颗白菜过河的办法,所以依次成功返回运算结果后,需要继续运算,直至求出结果,即给出农夫的过河方案。4、输出界面要求具有每一步中农夫所带对

2、象及每步之后各岸的物体,需要定义不同的数组来分别存储上述内容,并使界面所示方案清晰简洁。二、系统架构设计 1设计中首先涉及的就是数据类型的定义,首先,定义一个结构体用来存放农夫、狼、羊、白菜的信息。具体定义为:struct Condition int farmer; int wolf; int sheep; int cabbage; ;定义了一个结构体数组 Condition conditions100,定义状态数组用来记录他们过河的状态 0:起始岸;1:目的岸;程序中定义的 char action100 数组用来存放各个物件以及人过河或返回的说明语句。2程序中定义的子函数有:2.1 将狼带到

3、目的岸以及带回起始岸的函数 takeWolfOver()和takeWolfBack() ; takeWolfOver()函数中将 conditionsi+1.wolf=1,白菜、羊的状态不变,同时要有 actioni=“ take wolf over.“将狼带到目的岸语句;takeWolfBack()函数中将 conditionsi+1.wolf=0, 白菜、羊的状态不变,同时要有 actioni=“ take wolf back.“将狼带回起始岸语句。2.2 将羊带到目的岸以及带回起始岸的函数 takeSheepOver()和takeSheepBack() ;takeSheepOver()函

4、数中将 conditionsi+1.sheep=1,白菜、狼的状态不变,同时要有 actioni=“ take sheep over.“将羊带到目的岸语句;takeSheepBack()函数中将 conditionsi+1.sheep=0, 白菜、狼的状态不变,同时要有 actioni=“ take sheep back.“将羊带回起始岸语句。2.3 将白菜带到目的岸以及带回起始岸的函数 takeCabbageOver 和takeCabbageBack() ;takeCabbageOver()函数中将 conditionsi+1.cabbage=1,羊、狼的状态不变,同时要有 actioni=

5、“ take cabbage over.“将白菜带到目的岸语句。takeCabbageBack() ;函数中将 conditionsi+1.cabbage=0, 羊、狼的状态不变,同时要 actioni=“ take cabbage back.“将白菜带回起始岸语句。2.4 getOverBarely()函数是用来完成一个人单独过河的操作,调用该函数时 actioni=“ get over barely.“赋值 人单独回到目的岸,狼、羊、白菜的状态保持不变。 2.5 getBackBarely()函数是用来完成一个人单独回到起始岸的操作,调用该函数时 actioni=“ get back ba

6、rely.“赋值 人单独回起始岸,狼、羊、白菜的状态保持不变。2.6 输出过河的每一个步骤以及完成每一步之后人、狼、羊、白菜的状态这一动作是由 showResult()函数来完成的, 2.7 tryOneStep 是本次设计的核心程序,上面提到的所有子程序之间都是相互独立的,但是在 tryOneStep 函数中都要调用上面的子函数。3程序流程图:3.1 主函数的流程图如下: 图 1. 主函数的流程 开始结束初始化调用 tryOneStep()函数3.2tryOneStep 函数工作的流程图如下:开始输入两个变量是否出错 返回主函数N是否全部过河Y输出结果结束N是否有非法状态Y返回主函数 Y是否

7、有重复状态NNY返回主函数农夫状态是否为 0J=i+1农夫状态置为 0,递归调用狼的状态是否为 1N做相关处理,递归调用自身 YN羊的状态是否为 1做相关处理,递归调用自身 Y回到开始白菜的状态是否为 1做相关处理,递归调用自身 YY农夫状态置为 1,递归调用狼的状态是否为 0做相关处理,递归调用自身Y图 2.tryOneStep()函数的流程三、系统实现过程 编写好各个子程序后,在 main()函数中首先将人,狼,羊,白菜的初始状态都置为 0,接下来调用 tryOneStep()函数,同时 0 作为实参传给tryOneStep()函数。 1 tryOneStep()函数实现过程如下:1.1

8、首先,定义两个 int 型变量 c,j。1.2 接下来判断四者的状态是否都为 1,若都为 1 说明已经过河成功了,之后调用 showResult()函数,输出相关信息,在由 return 返回到调用处。程序执行结束。1.3 再判断是否有非法情况出现,即:羊单独和白菜在一起或狼和羊单独在一起,具体实现的语句 if(conditionsi.farmer!=conditionsi.wolf 如果条件成立的话执行 if 语句即执行 return 返回到调用点,否则,向下继续执行。 1.4 再通过 for(c=0;c using namespace std; struct Condition int f

9、armer; int wolf; int sheep; int cabbage; ; /定义状态数组 用来记录他们过河的状态 0:起始岸;1:目的岸 Condition conditions100; char* action100; / 存放各个物体及农夫过河或返回的情况 /产生某个动作之后再状态更新 void takeWolfOver(int i) actioni=“ take wolf over.“; conditionsi+1.wolf=1; conditionsi+1.sheep=conditionsi.sheep; conditionsi+1.cabbage=conditionsi.

10、cabbage; void takeWolfBack(int i) actioni=“ take wolf back.“; conditionsi+1.wolf=0; conditionsi+1.sheep=conditionsi.sheep; conditionsi+1.cabbage=conditionsi.cabbage; void takeSheepOver(int i) actioni=“ take sheep over.“; conditionsi+1.wolf=conditionsi.wolf; conditionsi+1.sheep=1; conditionsi+1.cabba

11、ge=conditionsi.cabbage; void takeSheepBack(int i) actioni=“ take sheep back.“; conditionsi+1.wolf=conditionsi.wolf; conditionsi+1.sheep=1; conditionsi+1.cabbage=conditionsi.cabbage; void takeCabbageOver(int i) actioni=“ take cabbage over.“; conditionsi+1.wolf=conditionsi.wolf; conditionsi+1.sheep=co

12、nditionsi.sheep; conditionsi+1.cabbage=1; void takeCabbageBack(int i) actioni=“ take cabbage back.“; conditionsi+1.wolf=conditionsi.wolf; conditionsi+1.sheep=conditionsi.sheep; conditionsi+1.cabbage=0; /农夫单独来回 void getOverBarely(int i) actioni=“ get over barely.“; conditionsi+1.wolf=conditionsi.wolf

13、; conditionsi+1.sheep=conditionsi.sheep; conditionsi+1.cabbage=conditionsi.cabbage; void getBackBarely(int i) actioni=“ get back barely.“; if(i=100)cout“index reached 100,something is wrong!“endl;return ;conditionsi+1.wolf=conditionsi.wolf; conditionsi+1.sheep=conditionsi.sheep; conditionsi+1.cabbag

14、e=conditionsi.cabbage; void showResult(int i) int c; for(c=0;ci;c+) coutc+1“.“actioncendl; coutendl“All came to the other side!“endl; void tryOneStep(int i) int c,j; /到达成功状态 if(conditionsi.farmer=1 return; /到达非法状态 if(conditionsi.farmer!=conditionsi.wolf /判断是否有重复状态 for(c=0;ci;c+) if(conditionsc.farme

15、r=conditionsi.farmer j=i+1; if(conditionsi.farmer=0) conditionsj.farmer=1; getOverBarely(i); tryOneStep(j); if(conditionsi.wolf=0) takeWolfOver(i); tryOneStep(j); if(conditionsi.sheep=0) takeSheepOver(i); tryOneStep(j); if(conditionsi.cabbage=0) takeCabbageOver(i); tryOneStep(j); else conditionsj.farmer=0; getBackBarely(i); tryOneStep(j); if(conditionsi.wolf=1) takeWolfBack(i); tryOneStep(j); if(conditionsi.sheep=1) takeSheepBack(i); tryOneStep(j); if(conditionsi.cabbage=1) takeCabbageBack(i); tryOneStep(j);

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报