1、typedef char DataType; /定义顺序表的数据类型为char#define MaxSize 10 /定义顺序表数组的最大个数#define MaxVertices 10 /定义顶点的最大个数#define MaxWeight 10000 /定义权值的具体最大值#include AdjMGraph.h /包含AdjMGraph.h头文件AdjMGraphCreate.h /包含AdjMGraphCreate.h头文件Dijkstra.h /包含Dijkstra.h函数的文件void main(void) AdjMGraph g; char a=A,BCDEF; RowColWe
2、ight rcw= 0,1,10,0,2,12,1,3,16,1,4,25,2,0,4,2,1,3,2,3,12, 2,5,8,3,4,7,5,3,2,5,4,10; int i,n=6,e=11; int distance6,path6; CreatGraph(&g,a,n,rcw,e); Dijkstra(g,0,distance,path); printf(nt从顶点%c到其余各顶点的最短路径值分别为:n,g.Vertices.list0); for(i=1;in;i+)t%c到%c 的最短路径值为:%dn, g.Vertices.list0, g.Vertices.listi,dist
3、ancei);nt从顶点%c到其余各顶点的最短路径的前一顶点为: if(pathi !=-1)t%c到%c 的最短路径的前一顶点为%cn,g.Vertices.list0, g.Vertices.listi,g.Vertices.listpathi);4算法测试及结果从程序的运行结果,再结合测试数据的有向带权图,可以得出,从顶点A到其余各顶点的最短路径及距离如下。A到B: 最短路径为(A,B),其距离为 10A到C: 最短路径为(A,C),其距离为 12A到D: 最短路径为(A,C,F,D),其距离为 22A到E: 最短路径为(A,C,F,D,E),其距离为 29A到F: 最短路径为(A,C,
4、F),其距离为205总结课程设计对学生而言是其对所学课程容掌握情况的一次自我验证,从而有着极其重要的意义。通过课程设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学容;数据结构从课程性质上讲是一门专业基础课,它的目的和任务就是训练学生对计算机加工的数据对象进行分析的能力,选择适当的数据结构及相应算法的能力,训练学生的编码以及调试能力,进而增加其对学习和应用相关专业课的兴趣。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,将结论用于实践,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中当
5、然遇到了问题,可以说得是困难重重,毕竟这是不可避免的,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。由于编程水平有限,其中头文件和狄杰斯特拉算法的函数设计等是参考书上资料,我想在以后的学习中,要更注重实践这一环节。在设计的过程中遇到种种问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。从设计过程看,在整整半个月的日子里,做到精益求精,学到了很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。从设计结果
6、看,设计要求完成任务,达到了预期的目的,设计、演示效果较好。最主要是从中学到了知识。参考资料1 朱战立.数据结构-使用C语言M.:电子工业,2009.2 Clifford A shaffer.数据结构与算法分析M.:电子工业,20063 Sartaj Sahni.数据结构、算法与应用M.小,译.:机械工业,2006.4 梁田贵,鹏. 算法设计与分析M: 冶金工业,2004.5 广树健.C语言程序设计M.:华南理工大学,2008.6 胡学刚. 算法与数据结构算法设计指导M.: 清华大学,20007 许卓群,冬青,唐世渭,铭. 数据结构与算法M.: 高等教育,2004.附件:AdjMGraph.h
7、头文件SeqList.h /包含顺序表头文件typedef struct SeqList Vertices; /存放顶点的顺序表 int edgeMaxVerticesMaxVertices; /存放边的邻接矩阵 int numOfEdges; /边的条数AdjMGraph; /图的结构体定义void Initiate(AdjMGraph *G,int n) /初始化 int i,j; for(i=0; for(j=0;jedgeij=0; else G-edgeij=MaxWeight; /MaxWeight表示无穷大 G-numOfEdges=0; /边的条数置为0 ListInitiat
8、e(&G-Vertices); /顺序表初始化void InsertVertex(AdjMGraph *G,DataType vertex) /在图G中插入顶点vertex ListInsert(&Vertices,G-Vertices.size,vertex); /顺序表尾插入void InsertEdge(AdjMGraph *G,int v1,int v2,int weight) /在图G中插入边,边的权为weight if(v1Vertices.size|v2Vertices.size) printf(参数v1或v2越界出错!); return; edgev1v2=weight;num
9、OfEdges+;void DeleteEdge(AdjMGraph *G,int v1,int v2)/在图G中删除边edgev1v2=MaxWeight|v1=v2)该边不存在!edgev1v2=MaxWeight;numOfEdges-;int GetFirstVex(AdjMGraph G,int v)/在图G中寻找序号为V的顶点的第一个邻接顶点/如果这样的邻接顶点存在,则返回该邻接顶点的序号;否则返回-1 int col; if(vG.Vertices.size)参数v1越界出错! return -1; for(col=0;col0&G.edgevcolMaxWeight)retur
10、n col;int GetNextVex(AdjMGraph G,int v1,int v2)/在图G中寻找v1顶点的邻接顶点v2的下一个邻接顶点/v1和v2都是相应顶点的序号G.Vertices.size|v2G.edgev1col return -1;AdjMGraphCreate.h头文件 int row; /行下标 /列下标 int weight; /权值RowColWeight; /边信息结构体定义void CreatGraph(AdjMGraph *G,DataType V,int n,RowColWeight E,int e)/在图G中插入n个顶点信息V和e条边信息E int i,k; Initiate(G,n); /顶点顺序表初始化 InsertVertex(G,Vi); /插入顶点 for(k=0;ke;k+) InsertEdge(G,Ek.row,Ek.col,Ek.weight); /插入边Dijkstra.h头文件void Dijkstra(AdjMGraph G,int v1,int distance,int path)/带权图G从下标v0顶点到其他顶点的最短距离distance和最短路径下标path int n=G.Vertices.size; int *s=(int *)malloc(sizeof(in
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1