#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单源无负权最小路径算法的更多相关文章

  1. 【算法】Dijkstra算法(单源最短路径问题)(路径还原) 邻接矩阵和邻接表实现

    Dijkstra算法可使用的前提:不存在负圈. 负圈:负圈又称负环,就是说一个全部由负权的边组成的环,这样的话不存在最短路,因为每在环中转一圈路径总长就会边小. 算法描述: 1.找到最短距离已确定的顶 ...

  2. 【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)

    [Bellman-Ford算法] [算法]Bellman-Ford算法(单源最短路径问题)(判断负圈) 结构: #define MAX_V 10000 #define MAX_E 50000 int ...

  3. 图之单源Dijkstra算法、带负权值最短路径算法

    1.图类基本组成 存储在邻接表中的基本项 /** * Represents an edge in the graph * */ class Edge implements Comparable< ...

  4. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  5. 【算法】单源最短路——Dijkstra

    对于固定起点的最短路算法,我们称之为单源最短路算法.单源最短路算法很多,最常见的就是dijkstra算法. dijkstra主要用的是一种贪心的思想,就是说如果i...s...t...j是最短路,那么 ...

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

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

  7. Dijkstra——单源最短路径

    算法思想 ①从一个源点开始,找距离它最近的点顶点v ②然后以顶点v为起点,去找v能到达的顶点w,即v的邻居 比较源点直接到 v的距离和(源点到v的距离+v到w的距离) 若大于后者则更新源点的到w的开销 ...

  8. 51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)

    1445 变色DNA 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1 ...

  9. Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32824   Accepted: 11098 Description Bes ...

随机推荐

  1. robots.txt 文件指南

    http://robots.51240.com/ robots 生成器

  2. 多项目中SVN权限管理精辟解析

    本节和大家讨论一下多项目SVN权限管理,主要包括建立版本库,修改版本库配置文件,配置允许访问的用户,设置用户访问权限.下面我们就来看一下SVN权限管理.svn权限管理svn的权限管理涉及到一下文件:p ...

  3. Python 模块功能paramiko SSH 远程执行及远程下载

    模块 paramiko paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现 ...

  4. Java-Spring MVC如何返回一个非JSP文件名字的地址

    return new ModelAndView("redirect:/bizitem/goEditItem.do?item_id="+item_id+"&msg= ...

  5. Dominating Patterns

    Dominating Patterns Time Limit:3000MS   Memory Limit:Unknown   64bit IO Format:%lld & %llu Descr ...

  6. 动态链接库dll,导入库lib,静态链接库lib

    目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库” ...

  7. 栈的java实现和栈的应用

    [例子和习题出自数据结构(严蔚敏版), 本人使用java进行实现.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 栈的实现 栈是一种先进后出的数据结构, 首先定义了栈需要实现的接口: ...

  8. ubuntu虚拟机和主机互ping及secureCRT使用

    1.首先使用ifconfig查看IP,如果没有IP的话就配置IP,配置的IP要和主机在一个网段,可以使用ipconfig查看主机(WIN7)的ip地址. 2.根据ifconfig列出的网卡配置IP地址 ...

  9. 忘了SA密码的SQL SERVER

    [暂时还未验证] SQL2008  如果 本地连接登录补上,也忘了Sa等管理账号的密码,可以通过单用户连接的方式登录 http://msdn.microsoft.com/zh-cn/library/m ...

  10. [转]PHP经验——PHPDoc PHP注释的标准文档

    文档翻译自:http://en.wikipedia.org/wiki/Phpdoc 标记 用途 描述 @abstract   抽象类的变量和方法 @access public, private or ...