最短路径Dijkstra(邻接矩阵)
#include "stdafx.h" #include <iostream> #include <fstream> #include <Windows.h>using namespace std;#define INFINITY 65535 #define MAX_VERTEX_NUM 20 //顶点最多个数 #define LENGTH 5 //顶点字符长度//*********************************邻接矩阵***********************************begin //邻接矩阵 typedef struct _Graph {int matrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];char vexs[MAX_VERTEX_NUM][LENGTH];int vexnum;int arcs; }Graph;int LocateVex(const Graph & g, char name[LENGTH]) {for (int i = 0; i < g.vexnum; i++){if (0 == strcmp(g.vexs[i], name)){return i;}}return -1; }//图的建造 void CreateGraph(Graph &g) {ifstream fcin(_T("dijkstra.txt"));fcin>>g.vexnum;for (int i = 0; i < g.vexnum; i++){for (int j = 0; j < g.vexnum; j++){g.matrix[i][j] = INFINITY;}}for (int i = 0; i < g.vexnum; i++){fcin>>g.vexs[i];}fcin>>g.arcs;char arcHead[LENGTH];char arcTail[LENGTH];int weight;for (int i = 0; i < g.arcs; i++){memset(arcHead, 0, LENGTH);memset(arcTail, 0, LENGTH);fcin>>arcTail>>arcHead>>weight;int x = LocateVex(g, arcHead);int y = LocateVex(g, arcTail);//g.matrix[x][y] = weight;g.matrix[y][x] = weight;} } //************************************邻接矩阵**************************************end//************************************最短路径************************************begin typedef int PathMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef int ShortPathTable[MAX_VERTEX_NUM];void ShortestPath_DIJ(Graph g, int v0, PathMatrix &P, ShortPathTable &D) {bool final[MAX_VERTEX_NUM];int v = 0;for (; v < g.vexnum; v++){final[v] = false;D[v] = g.matrix[v0][v];for (int w = 0; w < g.vexnum; w++){P[v][w] = false;}if (D[v] < INFINITY){P[v][v0] = true;P[v][v] = true;}}D[v0] = 0;final[v0] = true;for (int i = 1; i < g.vexnum; i++){int min = INFINITY;for (int w = 0; w < g.vexnum; w++){if (!final[w]){if (D[w] < min){v = w;min = D[w];}}}final[v] = true;for (int w = 0; w < g.vexnum; w++){if (!final[w] && (min + g.matrix[v][w]) < D[w]){D[w] = min + g.matrix[v][w];for (int j = 0; j < g.vexnum; j++){P[w][j] = P[v][j];}P[w][w] = true;}}} }//************************************最短路径************************************end //辅助函数,设置控制台的颜色 void SetConsoleTextColor(WORD dwColor) {HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);if (INVALID_HANDLE_VALUE == handle){return;}SetConsoleTextAttribute(handle, dwColor); }int _tmain(int argc, _TCHAR* argv[]) {Graph graph;CreateGraph(graph);PathMatrix P;ShortPathTable D;SetConsoleTextColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);cout<<"************************最短路径**************************"<<endl<<endl;ShortestPath_DIJ(graph, 0, P, D);cout<<"最短路径数组p[i][j]如下:"<<endl;for(int i = 0; i < graph.vexnum; ++i){for(int j=0;j<graph.vexnum;++j)cout<<P[i][j]<<" ";cout<<endl;}cout<<"源点到各顶点的最短路径长度为:"<<endl;for(int i = 1;i < graph.vexnum; ++i){if (INFINITY == D[i]){cout<<graph.vexs[0]<<" "<<graph.vexs[i]<<" 无"<<endl; }else{cout<<graph.vexs[0]<<" "<<graph.vexs[i]<<" "<<D[i]<<endl; }}return 0; }
界面运行如下:
建造图用到的dijkstra.txt如下:
6 V0 V1 V2 V3 V4 V5 8 V0 V2 10 V0 V4 30 V0 V5 100 V1 V2 5 V2 V3 50 V3 V5 10 V4 V3 20 V4 V5 60
最短路径Dijkstra(邻接矩阵)相关推荐
- 使用邻接矩阵实现有向图最短路径Dijkstra算法
题目描述: 用邻接矩阵存储有向图,实现最短路径Dijkstra算法,图中边的权值为整型,顶点个数少于10个. 输入描述 首先输入图中顶点个数和边的条数: 再输入顶点的信息(字符型): 再输入各边及其权 ...
- 最短路径-Dijkstra算法与Floyd算法
最短路径-Dijkstra算法与Floyd算法 原文:https://www.cnblogs.com/smile233/p/8303673.html 一.最短路径 ①在非网图中,最短路径是指两顶点之间 ...
- 数据结构----单源最短路径Dijkstra
数据结构----单源最短路径Dijkstra 原理:参考趣学数据结构 代码: stack.h 栈代码 #pragma once #include<stdio.h> #define maxS ...
- 最短路径Dijkstra算法和Floyd算法整理、
转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径-Dijkstra算法和Floyd算法 Dijks ...
- 最短路径——Dijkstra算法与Floyd算法
最短路径 Dijkstra算法 C语言代码实现 代码解析 Floyd算法 算法解析 C语言代码实现 最短路径问题 最短路径问题是我们经常会面临的一种决策问题.在图论中,非网图(边没有权值)的最短路径就 ...
- 单源最短路径---Dijkstra算法
有这样一道题:在一个图(如图所示)中,一共有四个点:1 2 3 4 这四个点之间各有相连,且每条边都有自己的权值.现在小明在点1上, 他想要到3去,请问最短路径是多少. 很容易得到该图的邻接矩阵.我们 ...
- 分支限界法:单源最短路径--dijkstra算法
单源最短路径–dijkstra算法 前面已经多次介绍过dijkstra算法是贪心算法,是动态规划,实际上可以从分支限界的角度来理解: 分支限界法 分支限界法,实际上就是回溯法,一般意义的回溯法是基于深 ...
- 最短路径——Dijkstra算法以及二叉堆优化(含证明)
一般最短路径算法习惯性的分为两种:单源最短路径算法和全顶点之间最短路径.前者是计算出从一个点出发,到达所有其余可到达顶点的距离.后者是计算出图中所有点之间的路径距离. 单源最短路径 Dijkstra算 ...
- python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
最新文章
- Traceback (most recent call last): File AttributeError: 'NoneType' object has no attribute 'group'
- 职场小窍门:看穿同事性格的16个小动作
- Light OJ 1012
- java 小坑_关于Java子父类关系的小坑
- 【题意+推导讲解】1031 Hello World for U (20 分)_15行代码AC
- 计算机操作简介,什么是计算机操作的快捷键?计算机操作快捷方式简介
- MySQL:查询条件
- U3D的有限状态机系统
- 微服务架构案例(02):业务架构设计,系统分层管理
- Linux环境下源码编译方式安装MySQL5.1(1)
- C++面试题-面向对象-构造函数和析构函数
- 自动驾驶算法-滤波器系列(二)—— 卡尔曼滤波简介及其变种(EKF、UKF、PF)介绍
- 邮件服务器向hotmail等邮箱发信收到退信的解决方法
- Ext 3.1版本放出,可以免费下载了
- Mac编译OpenJDK8:configure: error: Xcode 4 is required to build JDK 8, the version found was 10.1config
- ssm毕设项目高校饭堂管理系统8gmjo(java+VUE+Mybatis+Maven+Mysql+sprnig)
- (一)Python小甲鱼入门教程——第一个小游戏001-004
- 5月14日 打印100以内与7有关的数
- 个人推荐一款并发测试工具
- 思维导图|kotlin入门基础语法
热门文章
- cad转换成png,svg
- mysql查询表的列名主键_SQl查询数据库表名、表的列名、数据类型、主键
- html自动补全pspad,免费代码编辑器 PSPad Editor 5.0.4.541 中文多语免费版
- Elasticsearch之深入了解Search的运行机制
- Python实战案例,requests模块,Python实现获取动态图表
- 抽血检查超敏c高_答疑抽血检查甲状腺需要空腹吗?
- apicloud ajax html,基于apicloudAJAX请求代码合集
- weblogic修改java重启_修改weblogic域的jdk
- python学生管理系统教学_Python项目:学生信息管理系统(完整版)
- houdini帮助文档_用houdini做个简单版本的pcopen