单源最短路径算法——Dijkstra算法
#include <stdio.h>
#include <stdlib.h>
#include <string.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */
#define MAXN (10001)
#define INF (1<<16) typedef struct _Vertex
{
int w[MAXN];
int cw;
int know;
int dis;
int path;
int ew[MAXN]; /*The edge weight of curent vertex to w[i] */ }Graph; Graph G[MAXN]; int read_graph ( void )
{
int i, k;
int n, m, ew; scanf ("%d", &n );
for ( i = ; i < n; i++ ) {
scanf ("%d", &m ); G[i].cw = m; G[i].know = ; G[i].dis = INF; G[i].path = -;
for ( k = ; k < m; k++ ) scanf ("%d%d", &G[i].w[k], &G[i].ew[k] );
} return n;
} int find ( int n )
{
int i;
int m; for ( m = -, i = ; i < n; i++ ) if ( !G[i].know ) { m = i; break; }
if ( m < ) return -; for ( i = m + ; i < n; i++ ) {
if ( !G[i].know ) {
if ( G[i].dis < G[m].dis ) m = i;
}
}
return m;
} void dijst ( int v , int n)
{
int i, k;
int min;
int *w = NULL;
int cw; G[v].dis = ; while () {
min = find ( n );
if ( min < ) { /*Have no vertex to continue*/
break;
} G[min].know = ;
w = G[min].w; cw = G[min].cw;
for ( i = ; i < cw; i++ ) {
if ( !G[ w[i] ].know ) {
if ( G[min].dis + G[min].ew[i] < G[ w[i] ].dis ) {
G[ w[i] ].dis = G[min].dis + G[min].ew[i];
G[ w[i] ].path = min;
}
}
}
}
} void print_path ( int v )
{
if ( G[v].dis > ) {
print_path ( G[v].path );
printf ("->v%d", v + );
} else
printf ("v%d", v + );
} int main(int argc, char *argv[])
{
int n;
int i; freopen ( "data.txt" , "r" , stdin );
n = read_graph ();
dijst ( , n ); for ( i = ; i < n; i++ ) {
print_path ( i );
printf("\n");
}
return ;
}
输入数据:
7
2 1 2 3 1
2 3 3 4 10
2 5 5 0 4
4 2 2 4 2 5 8 6 4
1 6 6
0
1 5 1
参考书籍:数据结构与算法分析(C语言描述第二版)
单源最短路径算法——Dijkstra算法的更多相关文章
- 单源最短路径(dijkstra算法)php实现
做一个医学项目,当中在病例评分时会用到单源最短路径的算法.单源最短路径的dijkstra算法的思路例如以下: 如果存在一条从i到j的最短路径(Vi.....Vk,Vj),Vk是Vj前面的一顶点.那么( ...
- 【算法导论】单源最短路径之Dijkstra算法
Dijkstra算法解决了有向图上带正权值的单源最短路径问题,其运行时间要比Bellman-Ford算法低,但适用范围比Bellman-Ford算法窄. 迪杰斯特拉提出的按路径长度递增次序来产生源点到 ...
- 单源最短路径:Dijkstra算法(堆优化)
前言:趁着对Dijkstra还有点印象,赶快写一篇笔记. 注意:本文章面向已有Dijkstra算法基础的童鞋. 简介 单源最短路径,在我的理解里就是求从一个源点(起点)到其它点的最短路径的长度. 当然 ...
- 0016:单源最短路径(dijkstra算法)
题目链接:https://www.luogu.com.cn/problem/P4779 题目描述:给定一个 n 个点,m 条有向边的带非负权图,计算从 s 出发,到每个点的距离. 这道题就是一个单源最 ...
- 单源最短路径问题-Dijkstra算法
同样是层序遍历,在每次迭代中挑出最小的设置为已知 ===================================== 2017年9月18日10:00:03 dijkstra并不是完全的层序遍历 ...
- 单源最短路径问题(dijkstra算法 及其 优化算法(优先队列实现))
#define _CRT_SECURE_NO_WARNINGS /* 7 10 0 1 5 0 2 2 1 2 4 1 3 2 2 3 6 2 4 10 3 5 1 4 5 3 4 6 5 5 6 9 ...
- 【算法设计与分析基础】25、单起点最短路径的dijkstra算法
首先看看这换个数据图 邻接矩阵 dijkstra算法的寻找最短路径的核心就是对于这个节点的数据结构的设计 1.节点中保存有已经加入最短路径的集合中到当前节点的最短路径的节点 2.从起点经过或者不经过 ...
- 【算法导论】单源最短路径之Bellman-Ford算法
单源最短路径指的是从一个顶点到其它顶点的具有最小权值的路径.我们之前提到的广度优先搜索算法就是一种无权图上执行的最短路径算法,即在所有的边都具有单位权值的图的一种算法.单源最短路径算法可以解决图中任意 ...
- 单源最短路——dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问 ...
- 单源点最短路径的Dijkstra算法
在带权图(网)里,点A到点B所有路径中边的权值之和为最短的那一条路径,称为A,B两点之间的最短路径;并称路径上的第一个顶点为源点(Source),最后一个顶点为终点(Destination).在无权图 ...
随机推荐
- 关于lr调用jar在vuser中可以运行,但是controller中却报错的问题
如题,错误如下:javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.DocumentBuilder ...
- 今天做项目时,用到了好多关于js的知识点,有的忘记了,然后晚上回来自己整理一番,明天继续整理。哈哈,分享给大家。
javascript 数据类型 typeof (直接量/变量)-------判断数据类型 简单数据类型(栈,空间小,速度快) string字符串 用引号引起来的文本 number数字 所有数字 NaN ...
- 02Mybatis_原生态jdbc编程中的问题总结——从而引生出为什么要用Mybatis
我们先用jdbc去编写一个例子: 第一步:建表 /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************** ...
- 【javascript激增的思考03】MVVM与Knockout
前言 今天搞的有点快,因为上午简单研究了下MVC,发现MVC不太适合前端开发,然后之前看几位前端前辈都推荐前端使用MVVM,但是我对其还不甚了解,所以我觉得下午还是应该先看看他是神马先,后面再决定要不 ...
- [deviceone开发]-do_QRCode的简单示例
一.简介 do_QRCode组件可以用来生成二维码,识别二维码图片文件,这个示例直观的展示组件基本的使用方式. 二.效果图 三.相关下载 https://github.com/do-project/c ...
- 认识基本的mfc控件
几乎可以在每个windows程序中都看到按钮.复选框.文本框以及下拉列表等等,这些都是控件.而且很多常用的控件已经内置到操作系统当中了,在Visual C++中,这些常用控件已经简答到能用“拖放”这种 ...
- (转)高性能JavaScript:加载和运行(动态加载JS代码)
浏览器是如何加载JS的 当浏览器遇到一个<script>标签时,浏览器首先根据标签src属性下载JavaScript代码,然后运行JavaScript代码,继而继续解析和翻译页面.如果需要 ...
- 如何在silverlight中以同步方式 获取sharepoint2013站点的当前登录账号
最近有个项目用到了silverlight要同步方式获取当前登录账号.异步的方式无法跟其他应用结合.主要先后顺序问题.但是silverlight非常不好获取到当前登录账号.即使获取到了也是异步方式获取. ...
- 应用matplotlib绘制地图
#!/usr/bin/env python # -*- coding: utf-8 -*- from math import sqrt import shapefile from matplotlib ...
- 国内最全最详细的hadoop2.2.0集群的HA高可靠的最简单配置
简介 hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在hadoop1时代,只有一个NameNode.如果该NameNode数据丢失或者不能工作,那么整个集群就不能恢复了 ...