三件有制约关系物品过河问题(2)

2019-08-31 09:49

printf(\在对岸 ※\else printf(\在原岸 ※\printf(\}

printf(\※\\t ↓ ※\\t ↓ \\t\\t ※ \\n\k=path[k]; y[i++]=path[k]; }

printf(\※\\t( %d, %d , %d , %d )\\t ※

\ printf(\均到达对岸\\t ※\\n\}

void DFS_path(AdjGraph *G,int u,int v)//求从u到v的简单路径 { int j;

visited[u]=TRUE;

for(j=0;jvexnum;j++)

if(G->adj[u][j]&& !visited[j] && !visited[v]){ path[u]=j; DFS_path(G,j,v); } }

void main() { int i,j; AdjGraph graph; CreatG(&graph);

for(i=0;i

i=locate(&graph,0,0,0,0);

j=locate(&graph,1,1,1,1); DFS_path(&graph,i,j); if (visited[j])

print_path(&graph,i,j); return; }

6.运行结果

7.程序的优缺点

程序明确了该题目的基本要求,友好的界面让大家清晰的知道了农夫、狐狸、兔子、蔬菜的过河顺序。

但是,输出的路径只有一个,因为两条路径基本相同,所以为了程序的复杂程度,我们就只输出一条。

另为,虽然我们已经尽力使界面美观,形象的输出问题的解,但总还不是太形象。

8.程序的时空性能

由于程序的规模很小,所以涉及到的数据也很少,所以时间复杂度和空间复杂度实际上也应该很小。对于此程序中的具体算法,比如说,深度优先搜索,DFS_path(),由于采用的是邻接矩阵的存储方式,所以它找到每个顶点的所需时间是O(n2),其中n为顶点数。如果

此程序涉及到一个大宗的数据,O(n2)确实是比较大,但本问题只涉及到最多16个数据,所以对于这个程序而言,时间复杂度和空间复杂度都不是最为主要的问题。但我们还是要坚持利用时间复杂度和空间复杂度很小的算法,以体现编程中的。

9.改进思想

由于本程序解决的这个问题功能单一,所以拓展的空间有限。但我们仍然有扩张之处: 一、因为程序中输出的路径是一条,但实际上存在两条路径。但我们观察一下这两条路径.

第一条:(0000)→(1010)→(0010)→(1011)→(0001)→(1101)→(0101)→(1111)

第二条:(0000)→(1010)→(0010)→(1110)→(0100)→(1101)→(0101)→(1111)

这其中只有两个不同,只在于是先将Fox带过去,还是先将Veget带过去,只是时间顺序的问题,对于其他的方面没有任何影响。所以这个对于题目中的问题似乎没有扩展之处,但延伸到其他问题,可能会出现路径长度不同等问题,这样对于用户可能就希望得到代价最短的那条路径。这时,我们打算将每条路径输出,然后供用户选择其中最理想的一条。考虑到算法,我们可以利用邻接表作为图的存储方式,然后从起始位置开始,深度优先搜索,搜索到最终位置是,输出这条路径,然后从起始位置的另为一个后继开始,进行深度优先搜索,然后循环,直到输出所有路径。

二、考虑到实际情况,每一条路径对农夫可能要付出不同的劳动力。比如说,农夫可能希望多带几次Veget过去,也不愿带一次Fox过去。而就此题而言,这种情况也不会发生,在观察一下他的两条路径:

第一条: 第二条: 带兔子过河 带兔子过河

乘船自己回原岸 乘船自己回原岸

带蔬菜过河 带狐狸过河

带兔子回原岸 带兔子回原岸

带狐狸过河 带蔬菜过河

自己回原岸 自己回原岸

带兔子过河 带兔子过河

很明显,这只是狐狸,蔬菜过河的时间顺序交换,与最终结果,对农夫来说的劳动力没有任何影响。

但如果真的存在劳动力不同的路径,我们的算法就会做出相应的改变。和这道题不同的是,从一种状态转移到另一种我们都要赋予一定的权值,这样从初始状态到最终状态就有一个表示劳动力付出的值,我们也将用网(边上带权值的图)这种数据结构,同样使用邻接表的存储结构,这样就可以求出每一条路径的同时,一同得到路径长度。这样可以使用户选择路径长度最短的那条。

另外,我们可以选择用Dijkstra(迪杰斯特拉)算法求最短路径,这样就可以方便用户找到最轻松实现自己的目的的路径。

三.对于四件有制约关系的物品过河问题,相对于三件更加复杂,但解决问题的思路大致相同。只是细节上更加复杂. 10.心得体会

数据结构是计算机学科的一门综合性的专业基础课,也是计算机学科的核心课程,在整个学科知识体系中占据非常重要的地位。通过该课程的学习,不仅为后续课程打好理论基础,而且进一步提高数据抽象能力和程序设计能力。数据结构课程内容多、概念多、方法多、高度抽象、逻辑性强、技巧性强、实践性强。

而最为有效的方法就是实践。的确,每一次从这样为期一个星期的集中上机,我们都收获颇丰。

一方面就是对数据结构的一些概念,数据结构和算法的思想理解的更加深刻,另一方面,也极大的锻炼了我们的实际动手操作能力。这对于工科要求我们要有极强的动手能力是完全吻合的。

通过这次集中上机,更加认识到数据结构的重要性,他的确是语言更加容易表达出来。比如说,栈这种数据结构,先进后出的线性表。假如我们对此不了解,那解决一些问题就会是

工程量很大,浪费很多时间,但效果可能还不是十分理想,但栈就为我们解决一大类问题提供了捷径。比如说,括号匹配问题啊,八皇后问题啊,都很能体现数据结构,栈的独特之处,优先之处。

当然,对于我们刚刚学习数据结构一个学期的新手,对一个问题立即找到最佳的数据结构类型来实现它显然存在一定的困难,但通过自己仔细的分析,加上一些信息的参考,我们最终还是完成了我们的选的任务。虽然我们的程序中也许不够完美,但通过一星期的努力,我们还算圆满完成了我们的任务,这总会有一种成就感,也总能激起我们的热情。

但通过这个,我们还有了更大的收获,就是要考虑另一个方面的问题,用户,公司。有时,你的程序要切实的考虑到用户群,可能用户没有计算机基础。所以,程序首要考虑的要加入用户。当然,公司有时要求我们要有十分漂亮的界面,可能有时我们只考虑到整个程序的功能是否完善,而忽略了用户期望的。这也是人性化的一方面,更是我们值得思考和改进的地方。

总之,做什么事情都要对认真,既然是该你做的事,肯定是你应该有这个能力,即使能力不够,也是应该借这个机会来培养。所以放心大胆地做,对自己有信心,就有动力。有人说,世上的事就怕认真二字。确实,做什么,只是认真地去做,踏踏实实,戒躁戒躁,静静地思考,慢慢地进步,真的是天下无难事。这就是我这次课程设计中得到的最大的体会,受益匪浅。


三件有制约关系物品过河问题(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《石钟山记》复习及拓展

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: