zoukankan      html  css  js  c++  java
  • 单源最短路径 -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];
    	}
    }
    
  • 相关阅读:
    Educational Codeforces Round 80 (Rated for Div. 2)
    寒假集训
    HDU-4609 3-idiots
    部分分式展开法
    线性同余方程组
    爬取哔哩哔哩python搜索结果
    数据可视化练习题
    python正则表达式
    git的安装和基础知识
    python学习计划
  • 原文地址:https://www.cnblogs.com/CSE-kun/p/14049379.html
Copyright © 2011-2022 走看看