迪杰斯特拉算法c语言6,迪杰斯特拉算法C语言实现
#ifndef GUIDE_H_INCLUDED
#define GUIDE_H_INCLUDED
#define MX 1000 //最大值 无穷
#define NUM 6 //最大顶点个数
typedef int adjmatrix[NUM][NUM];
typedef int path[NUM][NUM];
typedef int Dist[NUM];//v0到vi的的距离
int ps[NUM]={0}; //最短路径值
int final[NUM];//final[i]=1代表已经求出v0到vi的最短路径
const int vexs[NUM] = {0,1,2,3,4,5};
int arcs[NUM][NUM] = {
{MX,MX,10,MX,30,100},
{MX,MX,5,MX,MX,MX},
{MX,MX,MX,50,MX,MX},
{MX,MX,MX,MX,MX,10},
{MX,MX,MX,20,MX,60},
{MX,MX,MX,MX,MX,MX}
};
#endif
#include
using namespace std;
#include "guide.h"
//=====================================================
void ShorttestPath_DIJ(adjmatrix arc,int v,path &p,Dist &d)
{
//用迪杰斯特拉算法求解v0到其余个点的最短路径,p[v][w]代表v0到v经过w
int w=0;
for(int nv=0;nv
{
final[nv]=0;
d[nv]=arc[v][nv];
ps[nv]=d[nv];
for(int w=0;w
if(d[nv]
{
p[nv][v]=1;
p[nv][nv]=1;
}
}//for
d[v]=0;
final[v]=1;
int min=MX;
//开始主循环
for(int i=1;i
{
min=MX;
for(w=0;w
{
if(final[w]==0)
{
if(d[w]
{
v=w;
min=d[w];
}
}
}//for
final[v]=1;
for(w=0;w
{
if(final[w]==0&&(min+arc[v][w])
{
d[w]=min+arc[v][w];
ps[w]=ps[v]+arc[v][w];
for(int pos=0;pos
{
p[w][pos]=p[v][pos];//借助最短路径到达w点
}
p[w][w]=1;//经过w点
}//endif
}//for
}//for
}
void DIJ_Print(int start,path &P)
{
for(int i=1;i
{
int u=i;
if(final[i]==1)
{
cout<
cout<
int m=start;
for(int j=1;j
{
if( P[u][j]==1)
{
if(arcs[m][j]>0 && arcs[m][j]
{
cout<"<
m=j;
j=1;
}
}
}
cout<
}//endif
}//endfor
}
void ShortestPath()
{
int start = 5;
Dist D; //D[i]表示从start到i的最短距离;
path P; //P[i,j]表示从start到i的最短路径上会经过j
int t[NUM]={0};
int n=0;
cout << "输入出发点 (0~5 空格分隔)" << endl;
cin >> start;
if(start>=0 && start<6)
{
//调用迪杰斯特拉算法
ShorttestPath_DIJ(arcs,start,P,D);
cout <
cout << "到其他各点的最短路径长度 :"<
//调用迪杰斯特拉打印算法
DIJ_Print(start,P);
}//endif
else
cout << "没有这个地方!" << endl;
}
//============== mian文件 =============
int main()
{
char choose=0;
cout << "************************" << endl;
cout << " a.x到其他点的最短路径 " << endl;
cout << " b.退出 " << endl;
cout << " 版本号v1.8 " << endl;
cout << "************************" << endl;
cin >> choose;
while( choose!='b' )
{
if( choose=='a' )
{
ShortestPath();
cout << "===========================" << endl;
cout << " a.x到y的最短路径 b.退出 " << endl;
cout << "===========================" << endl;
}
else if(choose!='a'||choose!='b') cout << "输入错误,请重新输入:";
cin >> choose;
}
return 0;
}
迪杰斯特拉算法c语言6,迪杰斯特拉算法C语言实现相关推荐
- 图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)
一.基础知识 有向图 无向图 以无向图为例: 邻接矩阵: 度矩阵(对角矩阵): 二.最小生成树 应用:将网络顶点看着城市,边看着城市之间通讯网,边的权重看着成本,根据最小生成树可以构建城市之间 ...
- 图论应用 floyd(弗洛伊德)算法、dijkstra(迪杰斯特拉)算法
前言 图论应用是非常广泛的,不同于二叉树,二叉树是应用在数据存储结构提高查询效率的,而图论则是用在辅助决策系统中,求得最优化解的等等,而本篇文章中介绍的floyd(弗洛伊德)算法.dijkstra(迪 ...
- >算法笔记-动态规划-最短路径迪杰斯特拉算法
算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言 图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...
- 常用算法(八)——迪杰斯特拉算法
迪杰斯特拉算法 大纲目录 迪杰斯特拉算法 迪杰斯特拉算法 一.应用场景-最短路径问题 二.迪杰斯特拉(Dijkstra)算法介绍 三.迪杰斯特拉(Dijkstra)算法过程 四.源码 一.应用场景-最 ...
- 【数据结构】最小生成树(Prim算法,普里姆算法,普利姆)、最短路径(Dijkstra算法,迪杰斯特拉算法,单源最短路径)
文章目录 前置问题 问题解答 一.基础概念:最小生成树的定义和性质 (1)最小生成树(Minimal Spanning Tree)的定义 (2)最小生成树(MST)的性质 二.如何利用MST性质寻找最 ...
- 算法图解part7:狄克斯特拉算法
算法图解part7:狄克斯特拉(Dijkstra)算法 1.狄克斯特拉算法(Dijkstra's algorithm) 2.术语 3.负权边 4.实现狄克斯特拉算法 4.1 最短路径思路 4.2 py ...
- C语言常用算法 脚本之家,C/C++常用算法手册 秦姣华 中文pdf扫描版 22.5MB
<C/C++常用算法手册>分3篇,共13章,"第1篇算法基础篇"介绍了算法概述,重点分析了数据结构和基本算法思想:"第2篇算法基本应用篇"详细讲解了 ...
- 【每日算法】C语言8大经典排序算法(2)
接上文--->[每日算法]C语言8大经典排序算法(1) 二.插入类排序 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中 ...
- 数据结构源码笔记(C语言):置换-选择算法
//实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...
- Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)
Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...
最新文章
- windows配置nginx实现负载均衡集群
- 6.神操作(把master上的三个安装包scp给slave)—Hadoop完全分布式搭建完成
- 记一次使用 Lombok 翻车造成的事故!
- SpringCloud--Eureka服务注册与发现 Eureka 集群搭建 详细案例!!!
- jmeter(五)几种不同的content-type方式
- 【Paddle 经验分享】利用PaddleHub 2.x 完成文本分类训练的坑
- 全民加速节:全站加速在互联网媒体应用上的最佳实践
- 贾跃亭“站台”!乐视高调宣布回归:60余款新品发布,还将发布超级手机
- 苹果新专利曝光,可通过GPS和视觉识别器来识别车辆
- 7.彻底搞懂javascript-闭包
- Flutter进阶第7篇: 调用原生硬件Api实现照相机拍照和相册选择 以及拍照上传到服务器
- 猎户座计划软件测试,三星Exynos4412
- php api框架 登录验证码,thinkphp3.2 框架如何使用验证码
- 并行计算之路5——CUDA的硬件架构
- 读 Joseph J. Rotman 之《抽象代数基础教程》
- oracle新建定时任务,Oracle创建定时任务
- 数据分析师职业分析报告
- ORACLE使用DBLINK导入导出数据
- 1016C. Vasya And The Mushrooms
- 小试牛刀—猜数字游戏
热门文章
- 沉迷机器人操作系统的一个理由和四种修仙秘籍(更新ROS 2.0内容)
- 强网杯2022 pwn 赛题解析——yakagame
- 计算机网络的 166 个核心概念
- 批量将一个 PDF 文件按固定页数拆分成多个小的 PDF 文件
- python爬取招聘网站源码及数据分析_Python爬取招聘网站进行数据分析,福利待遇一清二楚,高薪很简单...
- lubuntu xubunut ubuntu kubuntu 区别
- html5在线聊天一对一,纯js网页在线聊天对话插件(原创)
- 现场总线---can总线
- fastapi框架tortoise-orm运用
- 一个码稿人自述:什么样的文档产品适合我?|深度吐槽