- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法与数据结构
课程设计
班 级:
姓 名:
指导老师:
2015年6月22~2015年7月3日
目录
1.设计方案…………………………………….3
2.实现过程……………………………………3
3.测试…………………………………………3
4.使用说明…………………………………….13
5.难点与收获…………………………………..13
6.实现代码……………………………………….13
7.可改进的地方………………………………..25
设计方案
能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,选择相应的存储结构,设计出解决问题的有效算法,实现图的一些基本操作,此次设计主要需要解决对无向图,无向网,有向图,有向网的一些基本操作和应用,因此可以设计一个基于VC或VS的应用程序,数据可以从键盘输入,然后设计程序利用多级菜单实现各种功能。
实现过程
实现过程的主函数为:void main( )
对无向图的基本操作及应用的实现
创建无向图的邻接矩阵(void creat_mg(Mgraph G))
创建无向图的邻接表 (void CreatAdjList(Graph* G))
无向图的深度优先遍历 (void DFS(Graph *G, int i, int visited[]))
无向图的广度优先遍历 (void BFS(Graph* G,int v,int visited[]))
对无向网的基本操作及应用的实现
创建无向网的邻接矩阵 (CreateNDNGraphics(Graphics G))
创建无向网的邻接表(CreateUDN(ALGraph G))
求最小生成树(Prim(int graph[][MAX], int n))
对有向图的基本操作及应用的实现
创建有向图的邻接矩阵(CreateDGraphics(Graphics G))
创建有向图的邻接表(CreateDG(ALGraph G))
拓扑排序(TopSort(Graphaa g))
对有向网的基本操作及应用的实现
创建有向网的邻接矩阵(CreateDNGraphics(Graphics G))
创建有向网的邻接表(CreateUDN(ALGraphh G, indegree indegree))
关键路径 (CriticalPath(ALGraphh g, indegree indegree))
单源最短路径(myDijstra(n,1))
测试
数据输入:从键盘输入操作对应的序号
最初入口界面
无向图:
无向图的邻接矩阵:
无向图的邻接表:
无向图的深度优先遍历:
无向图的广度优先遍历:
无向网的基本操作及应用
无向网的邻接矩阵:
无向网的邻接表:
最小生成树:
有向图的基本操作及应用
创建有向图的邻接矩阵:
创建有向图的连接表
有向图的拓扑排序;
有向网的基本操作及应用
有向网的邻接矩阵:
创建有向网的邻接表;
有向网的关键路径:
4.单源顶点路径最短问题:
使用说明
总共有三级选择菜单,根据需要从键盘输入对应菜单序号,进入相应输入界面,输入待测数据,对图或网进行相应的操作
难点与收获
用代码实现各种操作时,代码容易出现逻辑上的错,个人觉得这种错误易发现但比较难修改,比如,在实现图的深度优先遍历时,利用了递归函数(DFS(G,i,visited)),通过查找资料和看书,多次调试,在程序中实现调用,实现了对图的深度优先遍历。这次通过上机实习,我更加深入的学习了图和网的相关内容和掌握了图和网的一些基本操作,也学会有效利用基本调试方法,会找出程序代码中的错误并且修改,提高了自己发现问题和解决问题的能力,受益匪浅。
六.实现代码
无向图:
//=================创建无向图(邻接表)===================//
void CreatAdjList(Graph* G)
{
int i,j,k;
edgenode * p1;
edgenode * p2;
cout请输入无向图的顶点数和边数(如:2 1):endl;
cinG-vexnumG-arcnum;
coutendl;
cout开始输入顶点表(如:1 2)endl;
for (i=1;i=G-vexnum;i++)
{
cinG-adjlists[i].vertex;
G-adjlists[i].edgelink=NULL;
}
coutendl;
cout开始输入边表信息:endl;
coutendl;
for
文档评论(0)