1、(2)初始图的结构;(3)向图中插入元素;(4)查找某元素在图顶点中的位置;(5)创建邻接表;(6)寻找寻找最短路径;(7)输出;4、本实验实现在图中找到两个顶点之间的最短路径。5、输入及输出示例:二 概要设计基本操作(1)、void InitGraph(MGraph *G)操作结果:初始图。(2)、void InsertGraph(MGraph *G,int i,VertexType e)初始条件:图G存在。将e插入到图中的第i个位置。(3)、 int Locate(MGraph G,VertexType v1) 找到V1在图中的位置。(4)、void CreateUND(MGraph *G
2、)用邻接矩阵和邻接表表示图(5)、void ShortestPath(MGraph G,int v0,int *p,int *D)寻找图G中顶点之间的最短路径(6)、void Pint(MGraph G)输出邻接矩阵。 三 详细设计1、每个模块:(1) 初始图void InitGraph(MGraph *G) /*初始图*/ int i,nu,mu; printf(n输入顶点的个数和(边)弧的个数:); scanf(%d%d,&nu,&mu); G-arcs=(ArcCell *)malloc(nu*sizeof(ArcCell *); for(i=0;iarcnum=mu; /*图的顶点数和
3、边数*/ (2)、将e插入到图中的第i个位置void InsertGraph(MGraph *G,int i,VertexType e) if(ivexnum) return; strcpy(G-vexsi.data,e.data); (3)、找到V1在图中的位置int Locate(MGraph G,VertexType v1) /*确定v1在图顶点中的位置*/ int i;G.vexnum;i+) if(strcmp(v1.data,G.vexsi.data)=0) return i; return -1;(4)、用邻接矩阵和邻接表表示图void CreateUND(MGraph *G)
4、/*采用数组(邻接矩阵)和邻接表表示无向图*/int i,j,k,*p,w; VertexType v1,v2; p=(int *)malloc(G-vexnum*sizeof(int);10;i+) pi=0;vexnum;+i) /*初始邻接表*/ for(j=0;j+j) arcsij.adj=ING; for(k=0;karcnum;+k) printf(n输入第 %d 条(边)弧相对的两个顶点值:n,k+1);%s%s,v1.data,v2.data); /*输入相邻的两个点值*/输入它们的权值: %dw); i=Locate(*G,v1);j=Locate(*G,v2); /*用i
5、 和j来确定它们的位置*/arcsij.adj=w; (5)、寻找图G中顶点之间的最短路径void ShortestPath(MGraph G,int v0,int *p,int *D)/*对顶点V0到其余顶点v的最短路径pv及其带权长度Dv若pvw为1,则w是从V0到W当前求得最短路径上的顶点,finalv为1,当且仅当v属于S,即已经求得从v0到v的最短路*/ int v,u,i,w,min; int *final; final=(int *)malloc(G.vexnum*sizeof(int); /*分配空间*/ for(v=0;v+v) finalv=0;Dv=G.arcsv0v.a
6、dj; /*初始化*/ for(w=0;w+w) pvw=0; /*设空路径*/ if(DvING)pvv0=1;pvv=1; /*v到v0有路径*/ Dv0=0;finalv0=1; /*初始化,V0顶点属于S集*/ for(i=1;i+) /*其余G.vexnum-1个顶点*/ min=ING; for(w=0;+w) /*求出矩阵这一行的最小值*/ if(!finalw) /*W顶点属于V-S中*/ if(Dwmin)v=w;min=Dw; finalv=1; /*离V0顶点最近的V加入S集*/+w) /*更新当前最短路径及距离*/finalw&(min+G.arcsvw.adjDw)
7、/*不是最小的,修改Dw,Pw*/ Dw=min+G.arcsvw.adj; for(u=0;uu+) pwu=pvu; pww=1; free(final);(6)、输出邻接矩阵void Pint(MGraph G) /*输出邻接矩阵*/int i,j; for(j=0;j+) if(G.arcsij.adj!=ING) printf(t%d,G.arcsij.adj); else if(i=j)printf(t0 else printf(t (7)、主函数void main() MGraph G; VertexType e; int i,j; int *p; int *D; InitGra
8、ph(&G); p=(int *)malloc(G.vexnum*sizeof(int *); pi=(int *)malloc(G.vexnum*sizeof(int); D=(int *)malloc(G.vexnum*sizeof(int);顶点值: n+i) /*给图顶点向量付值*/ scanf(%s,e.data);InsertGraph(&G,i,e); CreateUND(& /*构造图结构*/邻接矩阵为: Pint(G); /*输出邻接矩阵*/ ShortestPath(G,i,p,D); /*调用最短函数*/ for(j=0; if(i!=j) %s 到 %s 的最短路为 %
9、d n,G.vexsi.data,G.vexsj.data,Dj);nn getch();2、完整函数#includestdlib.hconio.hstring.h#define ING 9999typedef struct ArcCell int adj; /*顶点关系类型,用1表示相邻,0表示不相邻*/ArcCell,*AdjMatrix; /*邻接矩阵*/typedef struct type char data3; /*顶点值*/VertexType;typedef struct VertexType *vexs; /*顶点向量*/ AdjMatrix arcs; /*邻接矩阵*/ int vexnum,arcnum; /*图的顶点数和边数*/MGraph;五、实验总结这次数据结构课程设计的制作使我对数据结构和C语言的理解更加深刻,也使我认识到了自己很多不足之处。这次程序设计使我认识到,要做成编写一个完整的程序绝对不是一件简单的事情,不单要掌握基础知识更要勇于实践,不单要舍得花费时间更要用心去完成它。无论是编写程序还是完成现实生活中的其他事情,我们都必须按部就班地从点滴做起,逐步完成。不但要完成更要做到尽善尽美。教师评语:实验成绩:指导教师签名:批阅日期:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1