zoukankan      html  css  js  c++  java
  • 多源最短路径 -稠密图 -floyd_warshall

    针对稠密图的 Floyd-Warshall 算法
    Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Problem)
    允许存在权值为负的边

    1. 多源最短路径,floyd_warshall 算法,复杂度 O(n^3)
    2. 求出所有点对之间的最短路径,传入图的大小和邻接阵 n * n
    3. 返回各点间最短距离 min[]和路径 pre[],pre[i][j]记录 i 到 j 最短路径上 j 的父结点
    //多源最短路径,floyd_warshall 算法,复杂度 O(n^3)
    //求出所有点对之间的最短路径,传入图的大小和邻接阵 mat
    //返回各点间最短距离 min[]和路径 pre[],pre[i][j]记录 i 到 j 最短路径上 j 的父结点
    //可更改路权类型,路权可以为负
    #define MAXN 200
    #define inf 1000000000
    typedef int elem_t;		//可更改路权类型,路权可以为负
    void floyd_warshall(int n, elem_t mat[][MAXN], elem_t min[][MAXN], int pre[][MAXN]) {
    	int i, j, k;
    	for (i = 0; i < n; i++)
    		for (j = 0; j < n; j++)
    			min[i][j] = mat[i][j], pre[i][j] = (i == j) ? -1 : i;
    	for (k = 0; k < n; k++)
    		for (i = 0; i < n; i++)
    			for (j = 0; j < n; j++)
    				if (min[i][k] + min[k][j] < min[i][j])
    					min[i][j] = min[i][k] + min[k][j], pre[i][j] = pre[k][j];
    }
    

    固定中间节点,首尾遍历,更新
    没什么技巧,暴力跑

  • 相关阅读:
    设置android:supportsRtl=&quot;true&quot;无效问题
    使用 Docker/LXC 迅速启动一个桌面系统
    快速部署Python应用:Nginx+uWSGI配置详解
    链表源代码(C语言实现)
    delete
    Linux与Unix shell编程指南(完整高清版).pdf
    数据挖掘python,java
    shops
    如何用Excel打开CSV文件
    svn迁移到git
  • 原文地址:https://www.cnblogs.com/CSE-kun/p/14048965.html
Copyright © 2011-2022 走看看