资源预览内容
第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
第9页 / 共46页
第10页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
软件综合课程设计神秘国度的爱情故事活期储蓄帐目管理二一四 年 六 月神秘国度的爱情故事1问题陈述输入要求:输入由若干组测试数据组成。每组数据的第1行包含一正整数n(1n50000),代表神秘国度中小村的个数,每个小村即从0到n-1编号。接下来有n-1行输入,每行包含一条双向道路的两端小村的编号,中间用空格分开。之后一行包含一正整数m(1m500000),代表着该组测试问题的个数。接下来m行,每行给出a,b,c三个小村 的编号,中间用空格分开。当n为0时,表示全部测试结束,不要对该数据做任何处理。输出要求:对每一组测试给定的a,b,c,在一行里输出答案,即:如果c在a和b之间的路径上,输出yes,否则输出no。2程序代码/神秘国度的爱情故事代码#include<iostream>using namespace std;#define maxnode 100 /图中顶点的最大个数typedef char elemtype; /顶点的数据类型struct node /定义边的表结点 int adjvex; /邻接点在顶点向量中的下标struct node *next; /指向下一邻接点的指针;typedef struct /定义顶点结点 elemtype vertex; /顶点信息node *firstarc; /指向第一邻接点的指针vernode;typedef struct vernode verticesmaxnode;/定义邻接表int vexnum,arcnum; /顶点和边的数目algraph;algraph creatgraph(algraph g)/建立图函数int i,j,k; /i,j,k用于边和顶点的建立node *p; /用于新生成顶点的指针cout<<输入小村的个数:<<endl;cin>>g.vexnum;g.arcnum=g.vexnum-1;for(i=0;i<g.vexnum;i+)g.verticesi.firstarc=null;cout<<输入道路两端小村的编号(<<g.vexnum-1<<次,中间用空格分开):<<endl;for(k=0;k<g.arcnum;k+)cin>>i>>j;p=(node*)malloc(sizeof(node);p->adjvex=j;p->next=g.verticesi.firstarc;g.verticesi.firstarc=p;/用头插法p=(node*)malloc(sizeof(node);p->adjvex=i;p->next=g.verticesj.firstarc;g.verticesj.firstarc=p;return g;int visitedmaxnode; /用于深度遍历记住遍历过的顶点algraph g; /全局图int w; /记住c【j】点int count=0; /计数器,深度优先后,保存是否在ab间 int count1=0; /辅助计数器,判断abc是否重复void dfs(algraph g,int a,int b,int c)/g为邻接表存储的图,从第v个顶点出发递归的深度优先遍历函数if(a=c|b=c)count1+; /如果遍历到a或b点辅助计数器加一 visitedc=1; node *p;p=(node*)malloc(sizeof(node); /为p申请空间p=g.verticesc.firstarc; /指向c的第1邻接点的指针 while(p!=null)if(!visitedp->adjvex) dfs(g,a,b,p->adjvex); /访问p的顶点向量中的下标if(p->adjvex=w&&count1=1)count=1; /如果辅助计数器为一且遍历返回到c时计数器为一if(count=1)break;p=p->next; /遍历到已被遍历的顶点从此顶点的下一邻接点void if(algraph g) /判断c是否在a和b之间,原理是判断是否在一次探测,还是产生回溯int d; /d为判断的次数cout<<输入测试的次数:<<endl;cin>>d;值 int a10,b10,c10; /记住每次用于测试a、b、c的cout<<输入a,b,c三个小村的编号(<<d<<次,中间用空格分开):<<endl;for(int i=0;i<d;i+) cin>>ai>>bi>>ci; cout<<显示测试结果:<<endl;for(int j=0;j<d;j+)w=cj;dfs(g,aj,bj,cj);if(count=1)cout<<yes恭喜你将找到命中的恋人<<endl;/在遍历a或b后又重新遍历到cif(count=0)cout<<no你将与她错过 <<endl; /在遍历了a和遍历了b之后又从新遍历到cfor(int k=0;k<=g.vexnum;k+)visitedk=0;count=0;count1=0; /计数器清0void main()cout<< 故事背景介绍n<<endl;cout<< /* 欢迎来到神秘国度,在神秘国度里你将找到命中的恋人*/n<<endl;cout<< 。请按照提示信息寻找爱情。n<<endl; g=creatgraph(g);/调用图建立函数if(g);/调用判断函数3运行结果4设计体会与总结通过此次的课程试验的练习,我有了很大的收获,同时也加深了对数据结构这门课程的理解,比如说:图的邻接表存储,深度优先搜索树等。在这次课程设计中,我感受最深的是学会了用”二分查找”的方法查找问题。通过这次课程设计,我对c+编程有了更新的认识。以前编程只是注重如何编写函数能够完成所需要的功能,凭单纯的意识和简单的语句来堆砌出一段程序。现在编程有了深刻的感觉。在编写一个程序之前,自己能够综合考虑各种因素,选取我们需要的数据结构,在编写每一个函数之前,仔细斟酌比对,挑选出最适合当前状况的算法。这样,即使在完整的程序还没有写出来之前,我们心中已经有了明确的原图了,这样在无形中就提高了我们编写的程序的质量。另外,还体会到深刻理解数据结构的重要性。只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。了解典型数据结构的性质也是非常有用的,而它往往是我们编写程序的关键。活期储蓄帐目管理1问题陈述活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:(1)能比较迅速地找到储户的帐户,以实现存款、取款记账;(2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。2需求分析需要先建立结本程序点类模板,然后使用链表的基本操作应用实现各个程序的实现,头插法先建立链表使之成当前操作数据基础,然后可以使用节点的删除进行储户的销户,结点的插入的应用成为程序的开户(注意:建立新的用户要先确认新建的用户号不可以与之前的用户号码相同, 引起系统错误!本程序应用链表节点的比较改进程序。)。储户的存取也是应用节点的比较查找之后进行的账户钱数加减。程序的执行命令操作:(1)建立节电类模板,构建链表 (2)输入储户信息(3)执行各项操作(数据测试):查询储户信息 开户储户支取信息查询 储户的程序销户 程序完成 (4)程序退出3概要设计(1)结构设计说明1. 本程序主要应用数据结构节点类模板,首先构建节点类模板,在建立已有储户数据中对头结点(*head)分配动态存储空间,对头结点的邻接点(head->next)赋初值,循环插入新结点建立储户数据(头插法)。在账号循环插入中进行账号重复判断。2. 在查找账户的过程中,应用结点下移继续查找,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号