简易之处:顶点无序号,只能默认手动输入0,1,2...(没有灵活性)

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <malloc.h> using namespace std; const int VERTEX_NUM = 20;
const int INFINITY = 0x3fffffff; bool vis[VERTEX_NUM];
int dist[VERTEX_NUM]; // 源点到各点的距离
int pre[VERTEX_NUM]; class Graph {
public:
int vexNum;
int edgeNum;
// int vex[VERTEX_NUM];
int arc[VERTEX_NUM][VERTEX_NUM];
}; void createGraph(Graph &G)
{
int i, j, w;
cout << "请输入无向图的顶点数和边数:";
cin >> G.vexNum >> G.edgeNum; // 默认顶点序号为0 1 2 3...
for (int i = 0; i != G.vexNum; ++i) {
for (int j = 0; j != G.vexNum; ++j) {
G.arc[i][j] = INFINITY;
}
}
for (int k = 0; k != G.edgeNum; ++k) {
cout << "请输入边(vi, vj)的顶点i、j以及该边的权w:";
cin >> i >> j >> w;
G.arc[i][j] = w;
G.arc[j][i] = w;
}
} // Dijkstra算法
void Dijkstra(Graph &G, int src)
{
memset(vis, false, VERTEX_NUM);
memset(dist, INFINITY, VERTEX_NUM);
vis[src] = true;
for (int i = 0; i != G.vexNum; ++i) {
dist[i] = G.arc[i][src];
pre[i] = src;
}
int lowcost = INFINITY;
int lowcostIndex = src;
for (int cnt = 1; cnt != G.vexNum; ++cnt) {
lowcost = INFINITY;
for (int i = 0; i != G.vexNum; ++i) {
if (dist[i] < lowcost && !vis[i]) {
lowcost = dist[i];
lowcostIndex = i;
}
}
vis[lowcostIndex] = true;
for (int i = 0; i != G.vexNum; ++i) {
if (!vis[i] && G.arc[lowcostIndex][i] != INFINITY && lowcost + G.arc[lowcostIndex][i] < dist[i]) {
dist[i] = G.arc[lowcostIndex][i] + lowcost;
pre[i] = lowcostIndex;
}
}
}
} int main()
{
Graph G;
createGraph(G);
cout << "请输入源点:";
int source;
cin >> source;
Dijkstra(G, source);
for (int i = 0; i != G.vexNum; ++i) {
if (i == source) continue;
cout << "源点" << source << "到点" << i << "的距离为" << dist[i] << endl;
} return 0;
}

测试方法及结果:

最短路径——Dijkstra(简易版)的更多相关文章

  1. 最短路径 SPFA P3371 【模板】单源最短路径(弱化版)

    P3371 [模板]单源最短路径(弱化版) SPFA算法: SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA 最坏情况下复 ...

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

    一.最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1    ADE:2   ADCE:3   ABCE:3 ②在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径 ...

  3. 洛谷 P4779【模板】单源最短路径(标准版)

    洛谷 P4779[模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 10 ...

  4. [数据结构与算法-15]单源最短路径(Dijkstra+SPFA)

    单源最短路径 问题描述 分别求出从起点到其他所有点的最短路径,这次主要介绍两种算法,Dijkstra和SPFA.若无负权优先Dijkstra算法,存在负权选择SPFA算法. Dijkstra算法 非负 ...

  5. .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...

  6. MVC 验证码实现( 简易版)

    现在网站上越来越多的验证码,使用场景也是越来越多,登陆.注册.上传.下载...等等地方,都有可能大量使用到验证码,那么制作验证码到底有多简单呢?我们一起来看下最简易版的验证码实现过程- 验证码的基本步 ...

  7. 简易版自定义BaseServlet

    这几天在学Java Web,一直在思考Servlet重用的问题,就用java的反射机制实现自定义的简易版BaseServlet; 该方式有点像struts2 利用映射获取前端的参数.有兴趣的同学可以自 ...

  8. 简易版的TimSort排序算法

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. 简易版本TimSort排序算法原理与实现 TimSort排序算法是Python和Ja ...

  9. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

  10. Python写地铁的到站的原理简易版

    Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...

随机推荐

  1. linux 学习第九天

    一.磁盘 (FHS:Filesystem Hierarchy Standard(文件系统层次化标准)的缩写) 1.常用目录 /var  主要存放经常变化的文件,如日志 /usr/local  用户自行 ...

  2. Ldap实现AD域认证

    1.java Ldap基础类 package com.common; import java.io.FileInputStream; import java.io.IOException; impor ...

  3. Python入门 —— 2048实战(字符界面和图形界面)

    2048 game (共4种实现方法) 目录: .. 图形界面 ... pygame 和 numpy .. 字符界面 ... 第一种 ... curses ... wxpython ... 第二种 . ...

  4. nginx ssl pathinfo 伪静态 301 配置文件

    server { listen ; root /www/web/test_com/public_html; server_name test.com test.com; if ($host != '* ...

  5. django路由基本使用-6

    路由定义位置 django的路由是定义在 urls.py 文件下的 urlpatterns 列表中的. urls.py 文件是路由解析的入口. from django.conf.urls import ...

  6. python学习——初始面向对象

    一.讲在前面 编程的世界中有三大体系,面向过程.面向函数和面向对象编程.而面向过程的编程就包括了面向函数编程,接下来说一下面向对象.假如 ,你现在是一家游戏公司的开发人员,现在需要你开发一款叫做< ...

  7. 数据结构之 AVL个人笔记

    从这位前辈的博客园中学习的数据结构:https://www.cnblogs.com/skywang12345/ 非常感谢这位前辈. 以下文章摘录于 :skywang12345的博客园:转载请注明出处: ...

  8. linux线程篇 (二) 线程的基本操作

      线程 进程 标识符 pthread_t pid_t 获取ID pthread_self() getpid() 创建 pthread_create() fork 销毁 pthread_exit() ...

  9. Numpy 01

    Infi-chu: http://www.cnblogs.com/Infi-chu/ import numpy as np # 创建的数组 stus_score = np.array([[80, 88 ...

  10. 成都Uber优步司机奖励政策(3月29日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...