图中两个结点的最短路径的求解Word文档格式.docx

上传人:b****4 文档编号:17267832 上传时间:2022-11-30 格式:DOCX 页数:14 大小:128.89KB
下载 相关 举报
图中两个结点的最短路径的求解Word文档格式.docx_第1页
第1页 / 共14页
图中两个结点的最短路径的求解Word文档格式.docx_第2页
第2页 / 共14页
图中两个结点的最短路径的求解Word文档格式.docx_第3页
第3页 / 共14页
图中两个结点的最短路径的求解Word文档格式.docx_第4页
第4页 / 共14页
图中两个结点的最短路径的求解Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

图中两个结点的最短路径的求解Word文档格式.docx

《图中两个结点的最短路径的求解Word文档格式.docx》由会员分享,可在线阅读,更多相关《图中两个结点的最短路径的求解Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

图中两个结点的最短路径的求解Word文档格式.docx

(2)初始图的结构;

(3)向图中插入元素;

(4)查找某元素在图顶点中的位置;

(5)创建邻接表;

(6)寻找寻找最短路径;

(7)输出;

4、本实验实现在图中找到两个顶点之间的最短路径。

5、输入及输出示例:

二概要设计

基本操作

(1)、voidInitGraph(MGraph*G)

操作结果:

初始图。

(2)、voidInsertGraph(MGraph*G,inti,VertexTypee)

初始条件:

图G存在。

将e插入到图中的第i个位置。

(3)、intLocate(MGraphG,VertexTypev1)

找到V1在图中的位置。

(4)、voidCreateUND(MGraph*G)

用邻接矩阵和邻接表表示图

(5)、voidShortestPath(MGraphG,intv0,int**p,int*D)

寻找图G中顶点之间的最短路径

(6)、voidPint(MGraphG)

输出邻接矩阵。

三详细设计

1、每个模块:

(1)初始图

voidInitGraph(MGraph*G)/*初始图*/

{inti,nu,mu;

printf("

\n输入顶点的个数和(边)弧的个数:

"

);

scanf("

%d%d"

&

nu,&

mu);

G->

arcs=(ArcCell**)malloc(nu*sizeof(ArcCell*));

for(i=0;

i<

nu;

i++)/*分配邻接矩阵空间*/

arcs[i]=(ArcCell*)malloc(nu*sizeof(ArcCell));

vexs=(VertexType*)malloc(nu*sizeof(VertexType));

/*分配顶点空间*/

vexnum=nu;

G->

arcnum=mu;

/*图的顶点数和边数*/

}

(2)、将e插入到图中的第i个位置

voidInsertGraph(MGraph*G,inti,VertexTypee)

{if(i<

0||i>

vexnum)return;

strcpy(G->

vexs[i].data,e.data);

}

(3)、找到V1在图中的位置

intLocate(MGraphG,VertexTypev1)/*确定v1在图顶点中的位置*/

{inti;

G.vexnum;

i++)

if(strcmp(v1.data,G.vexs[i].data)==0)returni;

return-1;

(4)、用邻接矩阵和邻接表表示图

voidCreateUND(MGraph*G)/*采用数组(邻接矩阵)和邻接表表示无向图*/

{inti,j,k,*p,w;

VertexTypev1,v2;

p=(int*)malloc(G->

vexnum*sizeof(int));

10;

i++)p[i]=0;

vexnum;

++i)/*初始邻接表*/

{for(j=0;

j<

++j)

arcs[i][j].adj=ING;

for(k=0;

k<

arcnum;

++k)

{printf("

\n输入第%d条(边)弧相对的两个顶点值:

\n"

k+1);

%s%s"

v1.data,v2.data);

/*输入相邻的两个点值*/

输入它们的权值:

"

%d"

w);

i=Locate(*G,v1);

j=Locate(*G,v2);

/*用i和j来确定它们的位置*/

arcs[i][j].adj=w;

}

(5)、寻找图G中顶点之间的最短路径

voidShortestPath(MGraphG,intv0,int**p,int*D)

/*对顶点V0到其余顶点v的最短路径p[v]及其带权长度D[v]若p[v][w]为1,则w是从V0到W当前求得最短路径上的顶点,

final[v]为1,当且仅当v属于S,即已经求得从v0到v的最短路*/

{intv,u,i,w,min;

int*final;

final=(int*)malloc(G.vexnum*sizeof(int));

/*分配空间*/

for(v=0;

v<

++v){

final[v]=0;

D[v]=G.arcs[v0][v].adj;

/*初始化*/

for(w=0;

w<

++w)p[v][w]=0;

/*设空路径*/

if(D[v]<

ING){p[v][v0]=1;

p[v][v]=1;

}/*v到v0有路径*/

D[v0]=0;

final[v0]=1;

/*初始化,V0顶点属于S集*/

for(i=1;

i++){/*其余G.vexnum-1个顶点*/

min=ING;

for(w=0;

++w)/*求出矩阵这一行的最小值*/

if(!

final[w])/*W顶点属于V-S中*/

if(D[w]<

min){v=w;

min=D[w];

final[v]=1;

/*离V0顶点最近的V加入S集*/

++w)/*更新当前最短路径及距离*/

final[w]&

&

(min+G.arcs[v][w].adj<

D[w])){/*不是最小的,修改D[w],P[w]*/

D[w]=min+G.arcs[v][w].adj;

for(u=0;

u<

u++)

p[w][u]=p[v][u];

p[w][w]=1;

}

free(final);

(6)、输出邻接矩阵

voidPint(MGraphG)/*输出邻接矩阵*/

{inti,j;

{

for(j=0;

j++)

{if(G.arcs[i][j].adj!

=ING)

printf("

\t%d"

G.arcs[i][j].adj);

else{if(i==j)printf("

\t0"

elseprintf("

\t∞"

}

(7)、主函数

voidmain()

{MGraphG;

VertexTypee;

inti,j;

int**p;

int*D;

InitGraph(&

G);

p=(int**)malloc(G.vexnum*sizeof(int*));

p[i]=(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的最短路为%d\n"

G.vexs[i].data,G.vexs[j].data,D[j]);

\n\n"

}

getch();

2、完整函数

#include<

stdio.h>

stdlib.h>

conio.h>

string.h>

#defineING9999

typedefstructArcCell{

intadj;

/*顶点关系类型,用1表示相邻,0表示不相邻*/

}ArcCell,**AdjMatrix;

/*邻接矩阵*/

typedefstructtype{

chardata[3];

/*顶点值*/

}VertexType;

typedefstruct{

VertexType*vexs;

/*顶点向量*/

AdjMatrixarcs;

/*邻接矩阵*/

intvexnum,arcnum;

/*图的顶点数和边数*/

}MGraph;

五、实验总结

这次数据结构课程设计的制作使我对数据结构和C语言的理解更加深刻,也使我认识到了自己很多不足之处。

这次程序设计使我认识到,要做成编写一个完整的程序绝对不是一件简单的事情,不单要掌握基础知识更要勇于实践,不单要舍得花费时间更要用心去完成它。

无论是编写程序还是完成现实生活中的其他事情,我们都必须按部就班地从点滴做起,逐步完成。

不但要完成更要做到尽善尽美。

教师评语:

实验成绩:

指导教师签名:

批阅日期:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1