当前位置: 首页 > news >正文

数据结构--6.0最短路径

目录

一、迪杰斯特拉算法(Dijkstra)

二、弗洛伊德算法(Floyd)


 

在网图和非网图中,最短路径的含义是不同的。

——网图是两顶点经过的边上的权值之和最少的路径。                                                                    

——非网图是两顶点之间经过的边数最少的路径。

我们把路径起始的第一个顶点称为源头,最后一个顶点称为终点。

关于最短路径的算法:

1、迪杰斯特拉算法(Dijkstra)

2、弗洛伊德算法(Floyd)

一、迪杰斯特拉算法(Dijkstra)

#include <stdio.h>
#include <stdlib.h>#define MAXVEX 9
#define INFINITY 65536typedef int Patharc[MAXVEX];				//用于存储最短路径下标的数组 
typedef int ShortPathTable[MAXVEX];			//用于存储到各点最短路径的权值 void ShortestPath_Dijkstra(MGraph G , int V0,Patharc *p,ShortPathTable *D)
{int v,w,k,min;int final[MAXVEX];						//final[w]=1 表示已经求得顶点v0到vw的最短路径 //初始化数据 for(v=0;v<G.numVertexes; v++){final[v] = 0;						//全部顶点初始化为未找到最短路径 (*D)[v] = G.arc{V0}[v];				//将与v0点有连接线的顶点加上权值 (*p)[v] = 0;						//初始化路径数组p为0 }(*D)[V0] = 0;					//v0至v0的路径为0 final[v0] = 1;					//v0至v0不需要求路径 //开始主循环,每次求得v0到某个v顶点的最短路径 for(v=1;v<G.numVertexes;v++){min = INFINITY;for(w =0; w<G.numVertexes; v++){if(!final[w]&&(*D)[w]<min){k = w;min = (*D)[w];	}	} final[k] = 1;//将目前找到的最短路径置1 //修正当前最短路径及距离 for(w=0; w<G.numVextexes;w++){//如果经过v顶点的路径比现在这条路径的长度短的话,更新! if( !final[w]&&(min+G.arc[k][w] < (*D)[w])){(*D)[w] = min + G.arc[k][w];		//修改当前路径长度 (*p)[w] = k;						//存放前驱顶点 }} }
}

二、弗洛伊德算法(Floyd)

        弗洛伊德算法非常简洁优雅。

 

#include <stdio.h>
#include <stdlib.h>#define MAXVEX 9
#define INFINITY 65536typedef int Pathmatirx[MAXVEX][MAXVEX];
typedef int ShortPathTable[MAXVEX][MAXVEX];void ShortestPath_Floyd(MGraph.G,Pathmatirx *p,ShortPathTable *D)
{int v,w,k;//初始化  D  和   p for(v=0;v<G.numVertexes;w++){for(w=0;w<G.numVertexes;w++){(*D)[v][w] = G.matirx[v][m];(*p)[v][w] = w;}}//弗洛伊德算法 for(k=0;k<G.numVertexes;k++){for(v=0;v<G.numVertexes;v++){for(w=0;w<G.numVertexes;w++){if((*D)[v][w] > ((*D)[v][k] + (*D)[k][w])){(*D)[v][w] = (*D)[v][k] + (*D)[k][w];(*p)[v][w] = (*p)[v][k];}}}}
} 

http://www.lryc.cn/news/152186.html

相关文章:

  • Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】
  • 遗传算法决策变量降维的matlab实现
  • 基于Open3D和PyTorch3D读取三维数据格式OBJ
  • 带纽扣电池产品出口澳洲安全标准,纽扣电池IEC 60086认证
  • spring高级源码50讲-37-42(springBoot)
  • 腾讯云、阿里云、华为云便宜云服务器活动整理汇总
  • L1-055 谁是赢家(Python实现) 测试点全过
  • 开发一个npm包
  • 介绍几种使用工具
  • Vue:关于声明式导航中的 跳转、高亮、以及两个类名的定制
  • Sharding-JDBC分库分表-自动配置与分片规则加载原理-3
  • E8267D 是德科技矢量信号发生器
  • Git git fetch 和 git pull 区别
  • 软件UI工程师工作的岗位职责(合集)
  • Mac系统Anaconda环境配置Python的json库
  • Python数据分析与数据挖掘:解析数据的力量
  • 我的私人笔记(安装hive)
  • 【kubernetes】k8s部署APISIX及在KubeSphere使用APISIX
  • 串口接收数据-控制LED灯
  • python面试题合集(一)
  • 论文浅尝 | 利用对抗攻击策略缓解预训练语言模型中的命名实体情感偏差问题...
  • springboot web开发springmvc自动配置原理
  • 发表于《自然》杂志:语音转文本BCI的新突破实现62字/分钟的速度
  • 微软 Turing Bletchley v3视觉语言模型更新:必应搜索图片更精准
  • Ubuntu 22.04 x86_64 源码编译 pytorch-v2.0.1 笔记【2】编译成功
  • IIR滤波器
  • 【QT】使用qml的QtWebEngine遇到的一些问题总结
  • 230902-部署Gradio到已有FastAPI及服务器中
  • Ubuntu本地快速搭建web小游戏网站,公网用户远程访问【内网穿透】
  • 【LeetCode-中等题】199. 二叉树的右视图