#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语言实现相关推荐

  1. 图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)

    一.基础知识   有向图   无向图 以无向图为例: 邻接矩阵: 度矩阵(对角矩阵): 二.最小生成树 应用:将网络顶点看着城市,边看着城市之间通讯网,边的权重看着成本,根据最小生成树可以构建城市之间 ...

  2. 图论应用 floyd(弗洛伊德)算法、dijkstra(迪杰斯特拉)算法

    前言 图论应用是非常广泛的,不同于二叉树,二叉树是应用在数据存储结构提高查询效率的,而图论则是用在辅助决策系统中,求得最优化解的等等,而本篇文章中介绍的floyd(弗洛伊德)算法.dijkstra(迪 ...

  3. >算法笔记-动态规划-最短路径迪杰斯特拉算法

    算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言   图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...

  4. 常用算法(八)——迪杰斯特拉算法

    迪杰斯特拉算法 大纲目录 迪杰斯特拉算法 迪杰斯特拉算法 一.应用场景-最短路径问题 二.迪杰斯特拉(Dijkstra)算法介绍 三.迪杰斯特拉(Dijkstra)算法过程 四.源码 一.应用场景-最 ...

  5. 【数据结构】最小生成树(Prim算法,普里姆算法,普利姆)、最短路径(Dijkstra算法,迪杰斯特拉算法,单源最短路径)

    文章目录 前置问题 问题解答 一.基础概念:最小生成树的定义和性质 (1)最小生成树(Minimal Spanning Tree)的定义 (2)最小生成树(MST)的性质 二.如何利用MST性质寻找最 ...

  6. 算法图解part7:狄克斯特拉算法

    算法图解part7:狄克斯特拉(Dijkstra)算法 1.狄克斯特拉算法(Dijkstra's algorithm) 2.术语 3.负权边 4.实现狄克斯特拉算法 4.1 最短路径思路 4.2 py ...

  7. C语言常用算法 脚本之家,C/C++常用算法手册 秦姣华 中文pdf扫描版 22.5MB

    <C/C++常用算法手册>分3篇,共13章,"第1篇算法基础篇"介绍了算法概述,重点分析了数据结构和基本算法思想:"第2篇算法基本应用篇"详细讲解了 ...

  8. 【每日算法】C语言8大经典排序算法(2)

    接上文--->[每日算法]C语言8大经典排序算法(1) 二.插入类排序 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中 ...

  9. 数据结构源码笔记(C语言):置换-选择算法

    //实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...

  10. Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)

    Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...

最新文章

  1. windows配置nginx实现负载均衡集群
  2. 6.神操作(把master上的三个安装包scp给slave)—Hadoop完全分布式搭建完成
  3. 记一次使用 Lombok 翻车造成的事故!
  4. SpringCloud--Eureka服务注册与发现 Eureka 集群搭建 详细案例!!!
  5. jmeter(五)几种不同的content-type方式
  6. 【Paddle 经验分享】利用PaddleHub 2.x 完成文本分类训练的坑
  7. 全民加速节:全站加速在互联网媒体应用上的最佳实践
  8. 贾跃亭“站台”!乐视高调宣布回归:60余款新品发布,还将发布超级手机
  9. 苹果新专利曝光,可通过GPS和视觉识别器来识别车辆
  10. 7.彻底搞懂javascript-闭包
  11. Flutter进阶第7篇: 调用原生硬件Api实现照相机拍照和相册选择 以及拍照上传到服务器
  12. 猎户座计划软件测试,三星Exynos4412
  13. php api框架 登录验证码,thinkphp3.2 框架如何使用验证码
  14. 并行计算之路5——CUDA的硬件架构
  15. 读 Joseph J. Rotman 之《抽象代数基础教程》
  16. oracle新建定时任务,Oracle创建定时任务
  17. 数据分析师职业分析报告
  18. ORACLE使用DBLINK导入导出数据
  19. 1016C. Vasya And The Mushrooms
  20. 小试牛刀—猜数字游戏

热门文章

  1. 沉迷机器人操作系统的一个理由和四种修仙秘籍(更新ROS 2.0内容)
  2. 强网杯2022 pwn 赛题解析——yakagame
  3. 计算机网络的 166 个核心概念
  4. 批量将一个 PDF 文件按固定页数拆分成多个小的 PDF 文件
  5. python爬取招聘网站源码及数据分析_Python爬取招聘网站进行数据分析,福利待遇一清二楚,高薪很简单...
  6. lubuntu xubunut ubuntu kubuntu 区别
  7. html5在线聊天一对一,纯js网页在线聊天对话插件(原创)
  8. 现场总线---can总线
  9. fastapi框架tortoise-orm运用
  10. 一个码稿人自述:什么样的文档产品适合我?|深度吐槽