[算法] dijkstra单源无负权最小路径算法
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define INF 1000000
#define MAXN 32 int N;
int matrix[MAXN][MAXN]; int dist[MAXN];
int path[MAXN];
int s[MAXN]; void dijkstra(int u){
/* init */
int i, j, k;
int min;
int v;
int tmp; for(i =0; i < N; i++){
s[i]=0;
dist[i]= matrix[u][i];
if(dist[i]!= INF && i != u){
path[i]= u;
}
else{
path[i]=-1;
}
}
s[u]=1;
dist[u]=0;
for(i =1; i < N; i++){
min = INF;
for(j =0; j < N; j++){
if(!s[j]&& dist[j]< min){
min = dist[j];
v = j;
}
}
s[v]=1;
for(k =0; k < N; k++){
if(s[k]){
continue;
}
tmp = dist[v]+ matrix[v][k];
if(dist[k]> tmp){
dist[k]= tmp;
path[k]= v;
}
}
}
} void print_path(int u){
int rev[MAXN];
int count =0;
int i;
int v;
memset(rev,0,sizeof(rev)); rev[count++]= u;
v = path[u];
while(v !=-1){
rev[count ++]= v;
v = path[v];
} for(i = count -1; i >=0; i--){
if(i == count -1){
printf("%d", rev[i]);
}
else{
printf("->%d", rev[i]);
}
}
} int main(){
int i, j;
int u, v, w;
scanf("%d",&N);
memset(matrix,0,sizeof(matrix));
while(1){
scanf("%d%d%d",&u,&v,&w);
if(u ==-1&& v ==-1&& w ==-1){
break;
}
matrix[u][v]= w;
}
for(i =0; i < N; i++){
for(j =0; j < N; j++){
if(i == j){
matrix[i][j]=0;
}
elseif(matrix[i][j]==0){
matrix[i][j]= INF;
}
}
}
dijkstra(0);
for(i =1; i < N; i++){
printf("%d-->%d:%d\t",0, i, dist[i]);
print_path(i);
printf("\n");
}
return0;
}
[算法] dijkstra单源无负权最小路径算法的更多相关文章
- 【算法】Dijkstra算法(单源最短路径问题)(路径还原) 邻接矩阵和邻接表实现
Dijkstra算法可使用的前提:不存在负圈. 负圈:负圈又称负环,就是说一个全部由负权的边组成的环,这样的话不存在最短路,因为每在环中转一圈路径总长就会边小. 算法描述: 1.找到最短距离已确定的顶 ...
- 【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)
[Bellman-Ford算法] [算法]Bellman-Ford算法(单源最短路径问题)(判断负圈) 结构: #define MAX_V 10000 #define MAX_E 50000 int ...
- 图之单源Dijkstra算法、带负权值最短路径算法
1.图类基本组成 存储在邻接表中的基本项 /** * Represents an edge in the graph * */ class Edge implements Comparable< ...
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- 【算法】单源最短路——Dijkstra
对于固定起点的最短路算法,我们称之为单源最短路算法.单源最短路算法很多,最常见的就是dijkstra算法. dijkstra主要用的是一种贪心的思想,就是说如果i...s...t...j是最短路,那么 ...
- [数据结构与算法-15]单源最短路径(Dijkstra+SPFA)
单源最短路径 问题描述 分别求出从起点到其他所有点的最短路径,这次主要介绍两种算法,Dijkstra和SPFA.若无负权优先Dijkstra算法,存在负权选择SPFA算法. Dijkstra算法 非负 ...
- Dijkstra——单源最短路径
算法思想 ①从一个源点开始,找距离它最近的点顶点v ②然后以顶点v为起点,去找v能到达的顶点w,即v的邻居 比较源点直接到 v的距离和(源点到v的距离+v到w的距离) 若大于后者则更新源点的到w的开销 ...
- 51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)
1445 变色DNA 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1 ...
- Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32824 Accepted: 11098 Description Bes ...
随机推荐
- sdio/sd/mmc architecture
三个驱动mmc_core.ko mmc_block.ko omap_hsmmc.ko 读懂一个协议的架构有利于学习源码 参考了 http://processors.wiki.ti.com/index. ...
- wpa_supplicant wpa_cli 的使用说明
wpa_supplicant -d -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf -iwlan0 -B 会在/data/misc/wifi/下产生 ...
- keepalived 健康检测
1.TCP方式 详见:http://www.cnblogs.com/tengpan-cn/p/5776574.html 以下内容,都是基于此进行修改 2.HTTP_GET 根据返回状态判断服务器是否正 ...
- get 和 post请求的区别
(1)GET请求用于获取信息,从Client的角度看,不会改变资源状态,并且多次对同一URL的多个请求应该返回相同的结果. GET请求的参数会显示在URL中,即放置在HTTP协议头中(所 ...
- JS day01——window对象、执行顺序、线程模型
1.window对象 window对象表示当前浏览器的窗口,它是一个顶级对象,我们创建的所有对象.函数.变量都是window对象的成员. window对象自带了一些非常有用的方法.属性. window ...
- Python定制类
https://docs.python.org/3/reference/datamodel.html#special-method-names
- 实测switch支持的参数类型
@Test public void testSwitch() { switch (2) { case 1: System.out.println("int型:" + 1); bre ...
- makefile中使用echo向文件中输出版本号和编译时间
@echo "#define BUILD_TIME" `date +"%F_%H:%M:%S"` > buildTime_svnVer.h @echo & ...
- 初识Selenium(四)
用Selenium实现页面自动化测试 引言 要不要做页面测试自动化的争议由来已久,不做或少做的主要原因是其成本太高,其中一个成本就是自动化脚本的编写和维护,那么有没有办法降低这种成本呢?童战同学在其博 ...
- 字段为空sql语句,设置当前模式
delete from t_corpinfo where CORPID='' and CORPNAME='' 该命令是删除字段为空的记录 SET CURRENT SCHEMA DB2INST1;