9-最短路径(dijkstra)
参考博客:http://www.wutianqi.com/?p=1890
#include <iostream>
using namespace std;
#define max 1<<20 //无穷大
int pre[100]; //p[i]存放路径中i前面一个点
int dis[100]; //到远点的距离
int c[100][100]; //每个点间的距离
int dijkstra(int n, int v){ //v是源点,n是点的个数
bool s[100] = {0}; //表示是否在原点集合中
for(int i = 1; i <= n; i++){ //初始化dis[],s[],pre[]
dis[i] = c[i][v];
s[i] = 0;
if(dis[i] != max){
pre[i] = v;
}
else
pre[i] = 0;
}
dis[v] = 0;
s[v] = 1;
for(int i = 2; i <= n; i++){
int temp = max, u = v;
for(int j = 1; j <= n; j++){ //找到最小的直达源点的点
if(!s[j] && temp > dis[j]){
temp = dis[j];
u = j;
}
}
// cout << "u: " << u << endl;
s[u] = 1; //表示将找的的点放入源点集合
for(int j = 1; j <= n; j++){ //更新u的临边到远点的距离
if(!s[j] && c[j][u] < max){
// cout << "jJJ" << endl;
if(dis[j] > c[j][u] + dis[u]){
dis[j] = c[j][u] + dis[u];
pre[j] = u;
// cout << "j:" << j << endl;
}
}
}
}
return 1;
}
int luxian(int v, int u){ //查找点源点v到u点的距离
int p;
int count = 0, a[100] = {u};
p = pre[u];
while(p != v){
a[++count] = p;
p = pre[p];
}
a[++count] = v;
cout << "count" << count << endl;
for(int i = count; i >= 0; i--)
cout << a[i] << " -> ";
}
int main(){
ios::sync_with_stdio(false);
int n, line, a, b, len;
cin >> n >> line;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
c[i][j] = max;
cout << max;
for(int i = 1; i <= line; i++){
cin >> a >> b >> len;
if(len < c[a][b]){
c[a][b] = len;
c[b][a] = len;
}
}
for(int i = 1; i <= n; i++)
dis[i] = max;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++)
cout << c[i][j] << " ";
cout << endl;
}
dijkstra(n, 1);
luxian(1, n);
cout << endl;
cout << "1到n的最小距离: " << dis[n] << endl;
return 0;
}
9-最短路径(dijkstra)的更多相关文章
- 最短路径 dijkstra
最短路径 dijkstra #include <stdio.h> #include <string.h> #include <limits.h> #define M ...
- 网络最短路径Dijkstra算法
最近在学习算法,看到有人写过的这样一个算法,我决定摘抄过来作为我的学习笔记: <span style="font-size:18px;">/* * File: shor ...
- c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法
c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
- 最短路径——Dijkstra算法和Floyd算法
Dijkstra算法概述 Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图(无 ...
- 最短路径-Dijkstra算法与Floyd算法
一.最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1 ADE:2 ADCE:3 ABCE:3 ②在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径 ...
- 数据结构实验之图论七:驴友计划 ( 最短路径 Dijkstra 算法 )
数据结构实验之图论七:驴友计划 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...
- 最短路径——Dijkstra算法以及二叉堆优化(含证明)
一般最短路径算法习惯性的分为两种:单源最短路径算法和全顶点之间最短路径.前者是计算出从一个点出发,到达所有其余可到达顶点的距离.后者是计算出图中所有点之间的路径距离. 单源最短路径 Dijkstra算 ...
- 有向网络(带权的有向图)的最短路径Dijkstra算法
什么是最短路径? 单源最短路径(所谓单源最短路径就是只指定一个顶点,最短路径是指其他顶点和这个顶点之间的路径的权值的最小值) 什么是最短路径问题? 给定一带权图,图中每条边的权值是非负的,代表着两顶点 ...
- 理解最短路径-Dijkstra算法
最短路径—Dijkstra算法和Floyd算法 透彻理解迪杰斯特拉算法 Dijkstra算法的使用条件:图中不存在负权边. ---------------------------有待验证------- ...
随机推荐
- 样本稳定指数PSI
信用评定等级划分之后需要对评级的划分做出评价,分析这样的评级划分结果是否具有实用价值,即分析样本分布的稳定程度.样本分布稳定,则信用评定等级划分结果的实用价值就高.采用样本稳定指数( PSI )检验样 ...
- 【基础知识六】支持向量机SVM
开发库: libsvm, liblinear GitHub地址 SVM难点:核函数选择 一.基本问题 找到约束参数ω和b,支持向量到(分隔)超平面的距离最大:此时的分隔超平面称为“最优超平面 ...
- js中, match和exec方法的区别
1. 来源分别为: string.match(reg) 和 RegExp.exec(str): 2. 区别 > 现有 字符串s1 和 正则对象 r1. 目标: 抽出s1中的所有电话号码 ...
- Python - Django - ORM 操作表
ORM 的对应关系: 类 ---> 数据库表对象 ---> 数据库行属性 ---> 字段 操作数据库表 ---> ...
- JS 传各种文件到后端
由于要写一个前端上传文件按钮功能,本人前端是小白,所以在网上搜索了许多,发现FileReader非常好用. 不多BB,直接来. 1,前端只需要一个input标签, <input type=&qu ...
- 【求助】win 2008 R2 远程桌面多用户,破解最大连接数2的限制
[求助]win 2008 R2 远程桌面多用户,破解最大连接数2的限制. 1. 本地组策略设置的是“允许的RD最大连接数 5”. 2. 远程桌面仍然只能有两个连接在线. 3. 后来发现是下面这个设置限 ...
- 开源推荐系统Librec中recommender模块算法了解——cf模块
1. k近邻(k-NearestNeighbor)算法介绍及在推荐系统中的应用 https://zhuanlan.zhihu.com/p/25994179 k近邻(k-NearestNeig ...
- [Dart] Flutter 上传文件
/** * 请求响应数据 */ class MsgResponse { int code; // 状态代码,0 表示没有错误 Object data; // 数据内容,一般为字符串 String er ...
- Linux 各类设置、配置、使用技巧参考,Linux使用集锦
========== 参考格式 (新增记录时,复制粘贴在下)============= [日期]: <标题> 参考链接ref1: 参考链接ref2: 正文: ========== 参考格式 ...
- python入门-IF语句
1 格式 cars = ['audi','bmw','subaru','toyata'] for car in cars: if car =='bmw': print(car.upper()) els ...