1. #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
  2.  
  3. #define INF 1000000
    #define MAXN 32
  4.  
  5. int N;
    int matrix[MAXN][MAXN];
  6.  
  7. int dist[MAXN];
    int path[MAXN];
    int s[MAXN];
  8.  
  9. void dijkstra(int u){
        /* init */
        int i, j, k;
        int min;
        int v;
        int tmp;
  10.  
  11.     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;
                }            
            }
        }
    }
  12.  
  13. void print_path(int u){
        int rev[MAXN];
        int count =0;
        int i;
        int v;
       
        memset(rev,0,sizeof(rev));
  14.  
  15.     rev[count++]= u;
        v = path[u];
       
        while(v !=-1){
            rev[count ++]= v;
            v = path[v];    
        }
  16.  
  17.     for(i = count -1; i >=0; i--){
            if(i == count -1){
                printf("%d", rev[i]);
            }
            else{
                printf("->%d", rev[i]);
            }
        }
    }
  18.  
  19. 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. ip forward

    centos vi /proc/sys/net/ipv4/ip_forward ubuntu vi /etc/sysctl.conf sysctl -p

  2. [Java]知乎下巴第0集:让我们一起来做一个知乎爬虫吧哦耶【转】

    文章来源:http://jp.51studyit.com/article/details/16203.htm 作者:  汪海洋 身边的小伙伴们很多都喜欢刷知乎,当然我也不例外, 但是手机刷太消耗流量, ...

  3. max_%_connection参数详解

    对于连接数的设置,show variables里有三个参数可以对它进行控制,max_connections与max_user_connections以及max_connect_errors.下面对这三 ...

  4. 关于web.xml的格式

    先是filter  再是<filter-mapping> 然后<servlet> 再是<servlet-mapping> 这是一种规范基于j2ee 在开发的过程中一 ...

  5. UIKit控件直接显示网页文字内容

    NSString *html = @"<bold>Hello</bold> Now<br> <em>iOS</em> can cr ...

  6. struts2中的文件上传,文件下载

    文件上传: Servlet中的文件上传回顾 前台页面 1.提交方式post 2.表单类型 multipart/form-data 3.input type=file 表单输入项 后台 apache提交 ...

  7. ZOJ 2866 Overstaffed Company

    树状数组 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...

  8. TDK伪原创? 对matatags的研究总结

    /public_html/includes/modules/meta_tags.php 46行:switch ($_GET['main_page']) {这里面包括自定义页面index.php?mai ...

  9. Fragment里面嵌套Fragment的问题

    最近两天做项目时,要在fragment里面嵌套Fragment,最开始使用Fragment的hide,show等方法一直失败,,如图,message是一个fragment,在里面又有两个子fragme ...

  10. Sublime Text 最佳插件列表

    http://blog.jobbole.com/79326/ 推荐!Sublime Text 最佳插件列表 2014/07/25 · 工具与资源 · 26.1K 阅读 · 2 评论 · Sublime ...