Dijkstra(迪杰特斯拉)算法(极简版)
示例:用Dijkstra算法求A到图中各点的最短路径
Dijkstral算法伪代码如下:
n次循环至n个顶点全部遍历:
1.1从权值数组中找到权值最小的,标记该边端点k
1.2打印该路径及权值
2.1如果存在经过顶点k到顶点i的边比v->i的权值小
2.2更新权值数组及对应路径
源码:
#include<iostream>
#include<iomanip>//控制格式
#include<string>
#define INF 0x3f3f3f3f//定义无穷大
using namespace std;
#define vertexNum 5//源点数
int G[vertexNum][vertexNum];//邻接矩阵
string vertex[]={"A","B","C","D","E"};//源点字符串组
void CreateMGraph()
{
for(int i=0;i<vertexNum;i++)
for(int j=0;j<vertexNum;j++)
{
G[i][j]=INF;
}
G[0][1]=10;G[0][3]=30;G[0][4]=100;
G[1][2]=50;
G[2][4]=10;
G[3][2]=20;G[3][4]=60;
}
void Dijkstra(int v)
{
int dist[vertexNum],i,num,k,min;//dist为权值存储数组
string path[vertexNum];
int s[vertexNum]={0};//初始化标记数组
cout<<"初始权值数组和路径字符串数组:"<<endl;
for(i=0;i<vertexNum;i++)
{
dist[i]=G[v][i];
path[i]=vertex[v]+"-->"+vertex[i];
cout<<path[i]<<" ";
if(dist[i]!=INF) cout<<dist[i]<<endl;
else cout<<"∞"<<endl;
}
s[v]=1;//标记第一个访问点
dist[v]=0;
num=1;//计数器
cout<<"打印源点A到各点的最短路径及其权值和:"<<endl;
while(num<=vertexNum)//当不取等号时将不会获得A到自身的路径
{
min=INF;
for(k=0,i=0;i<vertexNum;i++)//查找最小值
{
if(s[i]==0&&(dist[i]<min)) {min=dist[i];k=i;}
}
cout<<path[k]<<" "<<dist[k]<<endl;//打印路径及对应路径长(权值和)
s[k]=1;num++;
for(i=0;i<vertexNum;i++)//更新权值数组和字符串数组
if((dist[i]>dist[k]+G[k][i])&&(G[k][i]!=INF))
{
dist[i]=dist[k]+G[k][i];
path[i]=path[k]+"-->"+vertex[i];
}
}
}
int main()
{
CreateMGraph();//创建邻接矩阵
cout<<"打印邻接矩阵:"<<endl;
for(int i=0;i<vertexNum;i++)
for(int j=0;j<vertexNum;j++)
{
if(G[i][j]==INF) cout<<setw(4)<<"∞";
else cout<<setw(4)<<G[i][j];
if(j==vertexNum-1) cout<<endl;
}
Dijkstra(0);//以A为源点
return 0;
}
示例截图:
喜欢记得给个赞哦
Dijkstra(迪杰特斯拉)算法(极简版)相关推荐
- Dijkstra(迪杰斯特拉)算法求单源最短路径问题
Dijkstra(迪杰斯特拉)算法求单源最短路径问题 重要的事情说三遍:代码不是我写的!代码不是我写的!代码不是我写的! 第一个算法是严蔚敏数据结构(C语言版)上写的,第二个算法是王道数据结构上写的, ...
- JavaScript实现dijkstra迪杰斯特拉算法(附完整源码)
JavaScript实现dijkstra迪杰斯特拉算法 PriorityQueue完整源代码 MinHeap.js完整源代码 Heap.js完整源代码 Comparator.js完整源代码 dijks ...
- C++实现Dijkstra(迪杰斯特拉)算法(附完整源码)
C++Dijkstra迪杰斯特拉算法的实现 C++Dijkstra(迪杰斯特拉)算法的完整源码(定义,实现,main函数测试) C++Dijkstra(迪杰斯特拉)算法的完整源码(定义,实现,main ...
- Dijkstra迪杰斯特拉算法 C++实现
本篇文章主要介绍了Dijkstra迪杰斯特拉算法的C++实现,文章包含两个部分,在第一部分中我会简单介绍迪杰斯特拉算法以及一些个人的理解,第二部分会对C++代码的逻辑进行解释.下面是我已经上传的代码资 ...
- 最短路径之Dijkstra(迪杰斯特拉)算法(无向图)
简介 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.由for循环可知,其时间 ...
- MATLAB轻松绘制地图路线——Dijkstra(迪杰斯特拉)算法最短路径规划
文章目录 1. 地图绘制 2. 计算各节点之间的距离 3. Dijkstra(迪杰斯特拉)算法 4. 根据计算出的距离利用Dijkstra(迪杰斯特拉)算法找出指定节点之间的最短路径 工程文件(可直接 ...
- C语言实现Dijkstra(迪杰斯特拉)算法(附完整源码)
Dijkstra迪杰斯特拉 Graph结构体定义 迪杰斯特拉算法完整源码(定义,实现,main函数测试) Graph结构体定义 struct Graph {int vertexNum;int **ed ...
- dijkstra迪杰斯特拉算法(邻接表法)
算法简易过程: 迪杰斯特拉算法(朴素) O(n^2) G={V,E} V:点集合 E:边集合 初始化时 令 S={某源点ear}, T=V-S= {其余顶点},T中顶点对应的距离(ear, Vi)值若 ...
- Dijkstra(迪杰斯特拉)算法
一.简介 迪克斯特拉算法又名Dijkstra算法(属于贪心算法).Dijkstra算法是从一节点到其余各节点最短路径计算方法. 迪杰斯特拉算法以起始点为中心向外层层扩展,直到扩展到终点为止. 算法思想 ...
- 算法提升:图的Dijkstra(迪杰斯特拉)算法
目录 概念 思路 代码 概念 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路 ...
最新文章
- python 创建只读的函数(@property的介绍与使用)
- 字节总监的开发手记,知乎5000+点赞!
- amd 深度学习模型部署_Web服务部署深度学习模型-续集
- java数据结构 -链表 -获取有效节点个数,单链表中倒数k个节点
- idea集成Activiti Designer插件
- java jsp校验提示信息_java Jquery表单校验代码jsp页面
- 作者:张鹏(1993-),男,国防科学技术大学并行与分布处理重点实验室硕士生...
- 详解varint编码原理
- Query siblings()
- Typore快速插入图片
- Effective C++ -----条款42:了解typename的双重意义
- 设计模式之观察者Observer
- 马蜂窝视频编辑框架设计及在 iOS 端的业务实践
- DUILIB相对位置修改为锚概念
- 大数据入门教程系列之Hive篇汇总
- ubuntu20.05+GTX1050Ti驱动+CUDA10.2+CUDNN8+pytorch最后OK
- git报错:error.GitError: manifests rev-list (‘^HEAD‘, ‘14686468c69c63f1995ab2a0a9ad90b2e1d5e01c‘, ‘--‘)
- 快捷方式管理软件推荐
- 女生选择了计算机专业能做什么工作?其实有这 5 种,前景很好
- 增长的旋律——AARRR模式思考(二)