#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(邻接矩阵)相关推荐

  1. 使用邻接矩阵实现有向图最短路径Dijkstra算法

    题目描述: 用邻接矩阵存储有向图,实现最短路径Dijkstra算法,图中边的权值为整型,顶点个数少于10个. 输入描述 首先输入图中顶点个数和边的条数: 再输入顶点的信息(字符型): 再输入各边及其权 ...

  2. 最短路径-Dijkstra算法与Floyd算法

    最短路径-Dijkstra算法与Floyd算法 原文:https://www.cnblogs.com/smile233/p/8303673.html 一.最短路径 ①在非网图中,最短路径是指两顶点之间 ...

  3. 数据结构----单源最短路径Dijkstra

    数据结构----单源最短路径Dijkstra 原理:参考趣学数据结构 代码: stack.h 栈代码 #pragma once #include<stdio.h> #define maxS ...

  4. 最短路径Dijkstra算法和Floyd算法整理、

    转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径-Dijkstra算法和Floyd算法 Dijks ...

  5. 最短路径——Dijkstra算法与Floyd算法

    最短路径 Dijkstra算法 C语言代码实现 代码解析 Floyd算法 算法解析 C语言代码实现 最短路径问题 最短路径问题是我们经常会面临的一种决策问题.在图论中,非网图(边没有权值)的最短路径就 ...

  6. 单源最短路径---Dijkstra算法

    有这样一道题:在一个图(如图所示)中,一共有四个点:1 2 3 4 这四个点之间各有相连,且每条边都有自己的权值.现在小明在点1上, 他想要到3去,请问最短路径是多少. 很容易得到该图的邻接矩阵.我们 ...

  7. 分支限界法:单源最短路径--dijkstra算法

    单源最短路径–dijkstra算法 前面已经多次介绍过dijkstra算法是贪心算法,是动态规划,实际上可以从分支限界的角度来理解: 分支限界法 分支限界法,实际上就是回溯法,一般意义的回溯法是基于深 ...

  8. 最短路径——Dijkstra算法以及二叉堆优化(含证明)

    一般最短路径算法习惯性的分为两种:单源最短路径算法和全顶点之间最短路径.前者是计算出从一个点出发,到达所有其余可到达顶点的距离.后者是计算出图中所有点之间的路径距离. 单源最短路径 Dijkstra算 ...

  9. python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

最新文章

  1. Traceback (most recent call last): File AttributeError: 'NoneType' object has no attribute 'group'
  2. 职场小窍门:看穿同事性格的16个小动作
  3. Light OJ 1012
  4. java 小坑_关于Java子父类关系的小坑
  5. 【题意+推导讲解】1031 Hello World for U (20 分)_15行代码AC
  6. 计算机操作简介,什么是计算机操作的快捷键?计算机操作快捷方式简介
  7. MySQL:查询条件
  8. U3D的有限状态机系统
  9. 微服务架构案例(02):业务架构设计,系统分层管理
  10. Linux环境下源码编译方式安装MySQL5.1(1)
  11. C++面试题-面向对象-构造函数和析构函数
  12. 自动驾驶算法-滤波器系列(二)—— 卡尔曼滤波简介及其变种(EKF、UKF、PF)介绍
  13. 邮件服务器向hotmail等邮箱发信收到退信的解决方法
  14. Ext 3.1版本放出,可以免费下载了
  15. Mac编译OpenJDK8:configure: error: Xcode 4 is required to build JDK 8, the version found was 10.1config
  16. ssm毕设项目高校饭堂管理系统8gmjo(java+VUE+Mybatis+Maven+Mysql+sprnig)
  17. (一)Python小甲鱼入门教程——第一个小游戏001-004
  18. 5月14日 打印100以内与7有关的数
  19. 个人推荐一款并发测试工具
  20. 思维导图|kotlin入门基础语法

热门文章

  1. cad转换成png,svg
  2. mysql查询表的列名主键_SQl查询数据库表名、表的列名、数据类型、主键
  3. html自动补全pspad,免费代码编辑器 PSPad Editor 5.0.4.541 中文多语免费版
  4. Elasticsearch之深入了解Search的运行机制
  5. Python实战案例,requests模块,Python实现获取动态图表
  6. 抽血检查超敏c高_答疑抽血检查甲状腺需要空腹吗?
  7. apicloud ajax html,基于apicloudAJAX请求代码合集
  8. weblogic修改java重启_修改weblogic域的jdk
  9. python学生管理系统教学_Python项目:学生信息管理系统(完整版)
  10. houdini帮助文档_用houdini做个简单版本的pcopen