算法详细讲解_第1页
算法详细讲解_第2页
算法详细讲解_第3页
算法详细讲解_第4页
算法详细讲解_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

问题描述实现Floyd算法,并求所示有向图中各顶点之间的最短路径及其长度。算法思想采用图的邻接矩阵存储,实现Floyd算法数组存储是否存在中间点使长度缩短。设计描述数据存储结构类型的定义:typedefstructMGraph(charvexs[MAX_VERTEX_NUM];intarcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];intvexnum^rcnum;GraphKindkind;)MGraph;源程序#include<stdlib.h>#include<stdio.h>//最大值//最大值//最大顶点个数#defineMAX_VERTEX_NUM20#defineTRUEl#defineFALSE0typedefenum(DG,DN,UDG,UDN}//四种图类型//四种图类型typedefstructMGraph(//顶点向量//顶点向量//邻接矩阵//图的当前顶点数和弧数//图的种类标志intarcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];intvexnum,arcnum;GraphKindkind;}MGraph;voidfind(intP[MAX_VERTEX_NUM][MAX_VERTEX_NUM][MAX_VERTEX_NUM],MGraphG,intajntb);voidmain()(MGraphG;intD[MAX_VERTEX_NUM][MAX_VERTEX_NUM]/P[MAX_VERTEX_NUM][MAX_VERTEX_NUM][MAX_VERTEX_NUM];intv,w,k,a,b,i;printfC'请输入顶点数和弧数“);scanf("%d%d,l/&G.vexnum/&G.arcnum);G.kind=DG;printff'请输入邻接矩阵\n");for(v=0;v<G.vexnum;v++)for(w=0;w<G.vexnum;w++)scanf("%d"z&G.arcs[v][w]); 〃读入邻接矩阵//P[v][w][k]为TRUE,则从v到w的最短路径中含有k节点//D[v][w]从v到w的最短路径的长度for(v=0;v<G.vexnum;v++)for(w=0;w<G.vexnum;w++)(D[v][w]=G.arcs[v][w];for(k=0;k<G.vexnum;k++)P[v][w][k]=FALSE;if(D[v][w]<INFINITY)P[v][w][v]=P[v][w][w]=TRUE;}for(k=0;k<G.vexnum;k++)for(v=0;v<G.vexnum;v++)for(w=0;w<G.vexnum;w++)if(D[v][k]+D[k][w]<D[v][w]){D[v][w]=D[v][k]+D[k][w];for(i=0;i<G.vexnum;i++)P[v][w][i]=P[v][k][i]||P[k][w][i];}for(a=0;a<G.vexnum;a++)for(b=0;b<G.vexnum;b++)if(D[a][b]<INFINITY&&a!=b){printf("%c到%(:最短路径为”,65+a,65+b);printf(,,%c\t"/65+a);find(PzGza,b);printf(”%c\t",65+b);printf(“长度为%d",D[a][b]);printfCV);})voidfind(intP[MAX_VERTEX_NUM][MAX_VERTEX_NUM][MAX_VERTEX_NUM],MGraph

GJntajntb)(intk;for(k=0;k<G.vexnum;k++)if(P[a][b][k]==TRUE&&k!=a&&k!=b){find(P,G,a,k);printf("%c\t",65+k);find(P,G,k,b);}}测试结果博腌入顶点数和弧数69懵瑞入邻接矩阵0310004100055100051000100025I5I5.TOC\o"1-5"\h\z100010( 0005I5I5.100031 000输入1000一 30输入(1000为无穷!z输出to—MMV^Mv路路路路路路路路路路路路路路路路路路路路y短短短短短短短短短短短短短短短短短短短短an曰<瞽瞽<瞽瞽瞽>瞽瞽>瞽瞽S皆瞽>瞽瞽取to—MMV^Mv路路路路路路路路路路路路路路路路路路路路y短短短短短短短短短短短短短短短短短短短短an曰<瞽瞽<瞽瞽瞽>瞽瞽>瞽瞽S皆瞽>瞽瞽取SBCDFcdjfbDf、bc、f、bcdfbc、dsreAAnABBBCCCDDDEEEEFFFPAAAABBBCCCDDEEEEFFFB长度为3D长废*4F*度为5C长度为1QF长度为5DD长度为5D'B长度为3B

BD

D•PvDDD长度为2continuec长度为4D长度为6B长度为8DD486为为为度度度-fe-fe-feB长度为5B DB F长度为13B C长度为7B C长度为6心得体会~。!!憧得了floyd算法的思想,用邻接矩阵存储带权值的图。问题主要出在输出打印方面VoidfindfintP[MAX_VERTEX_NUM][MAX_VERTEX_NUM][MAX_VERTEX_NUM],MGraphG,intajntb)(intk;for(k=0;k<G.vexnum;k++)if(P[a][b][k]==TRUE&&k!=a&&k!=b){find(BG,a,k);printf(,,\t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论