算法详细讲解

上传人:lis****210 文档编号:176800901 上传时间:2022-12-24 格式:DOCX 页数:4 大小:46.65KB
收藏 版权申诉 举报 下载
算法详细讲解_第1页
第1页 / 共4页
算法详细讲解_第2页
第2页 / 共4页
算法详细讲解_第3页
第3页 / 共4页
资源描述:

《算法详细讲解》由会员分享,可在线阅读,更多相关《算法详细讲解(4页珍藏版)》请在装配图网上搜索。

1、问题描述实现Floyd算法,并求所示有向图中各顶点之间的最短路径及其长度。算法思想采用图的邻接矩阵存储,实现Floyd算法数组P存储是否存在中间点使长度缩短。 设计描述数据存储结构类型的定义:typedef struct MGraphchar vexs M AX_VE RTEX_N U M ;int arcsMAX_VERTEX_NUMMAX_VERTEX_NUM;int vex nunxarc num;GraphKind kind;MGraph;源程序# include#include/最大值/最人顶点个数#define INFINITY 1000#define MAX_VERTEX_NUM

2、 20 #defineTRUEl#define FALSE 0typedef enumDG, DN, UDG, UDNGraphKind;/四种图类型typedef struct MGraphcharvexsMAX_VERTEX_NUMj;顶点向量intarcsMAX_VERTEX_NUMMAX_VERTEX_NUM;/ 邻接矩阵intvexnumrcnum;/图的当前顶点数和弧数GraphKindki nd;图的种类标志MGraph;void find(int PMAX_VERTEX_NUMMAX_VERTEX_NUMMAX-VERTEX_NUM,MGraph G,int ajnt b);v

3、oid main() MGraph G; intDMAX_VERTEX_NUMMAX_VERTEX_NUM/PMAX_VERTEX_NUMMAX_VERTEX_NUMMAX_ VERTEX_NUM;int ywkabi;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”,&G.arcsvw);读入邻接矩阵/ Pvwk为TRUE,则从v到w的最短路径中含有k

4、节点/ Dvw从v到w的最短路径的长度for (v = 0; v G.vexnum; v+)for (w = 0; w G.vexnum; w+)Dvw = G.arcsvw;for (k = 0; k G.vexnum; k+)Pvwk = FALSE;if (Dvw INFINITY)Pvwv = Pvww =TRUE;for (k = 0; k G.vexnum; k+)for (v = 0; v G.vexnum; v+)for (w = 0; w G.vexnum; w+)if(Dvk + DkwDvw)Dvw = Dvk + Dkw;for (i = 0; i G.vexnum;

5、i+)Pvwi = Pvki|Pkwi;for(a=0; aG.vexnum; a+)for(b=0; bG.vexnum; b+)if(Dab INFINITY & a!=b)printf(M%c 到(:最短路径为,65+3,65+6);printf(,%ct/65+a);find(PzGza,b);printf(,%ct,/65+b);printf(“长度为 %d“,Dab);printfCV);void find(int PMAX_VERTEX_NUMMAX_VERTEX_NUMMAX-VERTEX_NUM,MGraphGzint ajnt b)int k;for(k = 0; k G.

6、vexnum; k+) if(Pabk=TRUE & k!=a & k!=b) find(RG,a,k);printf(,%ct,/65+k); find(RGkb);测试结果5100010002睛揄入顶点数和弧数6 9 情鎰入邻接矩阵 0 3 1000 4 1000 5 1000 0 1 1000 10001000 10(0001000 3 10001000-3 0输入1000(1000为无穷! 输出toMMV Mv 路路路路路路路路路路路路路路路路路路路路y 短短短短短短短短短短短短短短短短短短短短an 曰曹簪習昏曹昏S曹暫曹習麻S B CD F c D、F、B D F、B CJFB c

7、D F B c、D SreaaaabbbcccdddeeeefffpA A A A B B B C C C DD E EE E FF FB长度为3D节廈型4F*度为5 ck度为cF长度为5DD长度为5DB长度为3BBDD PvDDD长度为2continuec长度为4D长度为6B长度为84 8 6 为为为 度度度 长V长c F B BB长度为5BDBF长度为13BC长度为7BC长度为6心得体会二! !懂得了 floyd算法的思想,用邻接矩阵存储带权值的图。 问题主要出在输出打印方面Void findfint PMAX_VERTEX_NUMMAX_VERTEX_NUMMAX_VERTEX_NUM,MGraph G,int ajnt b)int k;for(k = 0; k G.vexnum; k+)if(Pabk=TRUE & k!=a & k!=b)find(BG,a,k);printf(,t%c/65+k);find(RGkb);采用递归的思想一次寻找是否存在中间点然后打印出来。问题出在红色部分,判定是否采用递归,未考虑k是否与a b相同,结呆导致无限递归。 从而发现stack overflow的错误提示有可能出于递归无法跳出,导致栈的溢出问题。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!