• 单源最短路径 -dijkstra


    单源最短路径,dijkstra 算法,邻接阵形式,复杂度O(n^2)
    计算正权图的单源最短路(Single Source Shortest Path,源点给定,通过该算法可以求出起点到所有点的最短路),
    它是基于这样一个事实:
    如果源点到x点的最短路已经求出,并且保存在d[x] ( 可以将它理解为D(s, x) )上,那么可以利用x去更新x能够直接到达的点的最短路。

    //单源最短路径,dijkstra 算法,邻接阵形式,复杂度 O(n^2)
    //求出源 s 到所有点的最短路经,传入图的顶点数 n,(有向)邻接矩阵 mat
    //返回到各点最短距离 min[]和路径 pre[],pre[i]记录 s 到 i 路径上 i 的父结点,pre[s]=-1
    //可更改路权类型,但必须非负!
    #define MAXN 200
    #define inf 1000000000
    typedef int elem_t;		//可更改路权类型,但必须非负!
    void dijkstra(int n, elem_t mat[][MAXN], int s, elem_t* min, int* pre) {
    	int v[MAXN], i, j, k;
    	for (i = 0; i < n; i++)
    		min[i] = inf, v[i] = 0, pre[i] = -1;
    	for (min[s] = 0, j = 0; j < n; j++) {
    		for (k = -1, i = 0; i < n; i++)
    			if (!v[i] && (k == -1 || min[i] < min[k]))
    				k = i;
    		for (v[k] = 1, i = 0; i < n; i++)
    			if (!v[i] && min[k] + mat[k][i] < min[i])
    				min[i] = min[k] + mat[pre[i] = k][i];
    	}
    }
    
  • 相关阅读:
    《DSP using MATLAB》Problem 6.17
    一些老物件
    《DSP using MATLAB》Problem 6.16
    《DSP using MATLAB》Problem 6.15
    《DSP using MATLAB》Problem 6.14
    《DSP using MATLAB》Problem 6.13
    《DSP using MATLAB》Problem 6.12
    《DSP using MATLAB》Problem 6.11
    P1414 又是毕业季II
    Trie树
  • 原文地址:https://www.cnblogs.com/CSE-kun/p/14049379.html
Copyright © 2020-2023  润新知