菜单

【算法】单源最缺少路径和无限制两接触最为短缺路径总结(补增:SPFA)

2018年11月15日 - jQuery

1 4 4


0 2 5 4 

结构2:

import java.util.*;

public class Floyd_Warshall {

    static int v;    //顶点
    static int e;    //边
    static int matrix[][];

    public static void main(String args[]) {
        Scanner reader=new Scanner(System.in);
        v=reader.nextInt();
        e=reader.nextInt();
        matrix=new int[v+1][v+1];    //编号从1开始
        //矩阵初始化
        for(int i=1;i<=v;i++) {
            for(int j=1;j<=v;j++) {
                if(i==j) {    //顶点本身
                    matrix[i][j]=0;
                }
                else {    //无穷
                    matrix[i][j]=99999;
                }
            }
        }
        //读入边
        for(int i=1;i<=e;i++) {
            int first_City=reader.nextInt();
            int second_City=reader.nextInt();
            int value=reader.nextInt();
            matrix[first_City][second_City]=value;    //有向图
        }
        for(int k=1;k<=v;k++) {    //只允许经过顶点k
            for(int i=1;i<=v;i++) {
                for(int j=1;j<=v;j++) {
                    if(matrix[i][k]+matrix[k][j]<matrix[i][j]) {
                        matrix[i][j]=matrix[i][k]+matrix[k][j];
                    }
                }
            }
        }
        for(int i=1;i<=v;i++) {
            for(int j=1;j<=v;j++) {
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println();
        }
    }
}

 

4 3 12

#define MAX_V 10000
#define MAX_E 50000 
int d[MAX_V][MAX_V]; // d[u][v]表示边e=(u,v)的权值(不存在时设为INF,不过d[i][i] = 0) 
int V;             //  顶点数 

输出:

祝贺读了同一各大神的blog学会了SPFA算法:

1 2 2

     2.可知迎刃而解来负圈的希冀,如果d[i][i]起负数说明有负圈。

4 8

 

履新为最小值,此时邻接矩阵matrix[4][3]囤的尽管为假了巅峰1晚4及3的极度缺少路径;然后又借用了1之


1 3 6

【Bellman-Ford算法】

2018-07-28*
*

结构:

2 3 3

    【算法】Floyd-Warshall算法(任意两点间的无限短路程问题)(判断负圈)

  上图被使要求极4及顶点3之极致缺乏路径,可以比极端4直到3的途径和终点4事先到1,再至3之门径。

【Floyd-Warshall算法】

6 8 0 1 

    【最短路算法】Dijkstra+heap和SPFA的区分

毕后matrix[4][3]于是乎存储了极缺乏路径,求其他随意两触及啊是这般。

结构1:

  总结一下,求图中随心所欲两点的不过缺少路径,通过比较一致次于沾一个外顶点间接到达的无限缺乏路径和直接途径

     2.无负圈最多更新 V-1
次,否则有负圈。

  从图中任取两触及A、B,A到B的极缺乏路径无非只生半点种植情形:

算法特点:1.dp[i][j] =
min(dp[i][j] , dp[i][k] + d[k][j]);

开展较,更新也极端小值即可。

 

图片 1

结构:

  2:A先经过其他接触,再由外点到B。

       基于仅仅出k-1独点的场面,从进入第k个点和免加第k单点吃举行选择。

又中接到达B底门径长度进行较,然后更新也于小值。

 

  除了DFS和BFS求图中极差路径的章程,算法Floyd-Warshall也得以求图中自由两点之绝缺乏路径。

稠密图用Dijkstra,稀疏图用SPFA。

9 0 3 4 

#define MAX_V 10000
#define MAX_E 50000 
int cost[MAX_V][MAX_V];  //cost[u][v]表示e = (u,v)的权值 
int d[MAX_V];        //源点s出发的最短距离 
bool used[MAX_V];    //标记使用过的点 
int V;          //顶点数 

测试用例:

【dijkstra算法】

输入:

#define MAX_V 10000
#define MAX_E 50000
int V,E;   //顶点和边的数量 
struct edge{
    int from,to,cost;
};
edge es[MAX_E];//边集 
int d[MAX_V];    //d[i]表示从某个点出发到i的最短路径 

4 1 5

算法特点:1.老是都为此所有的限度更新具有的限,直到无可更新为止。

  1:A直接到B这漫长途径就是凡极短路径(前提是有是路);

算法特点:1.老是都摸没利用过的 d
最小之接触,用之点更新任何接触。

基本功及重新借用顶点2,此时复于matrix[4][3]和matrix[4][2]+matrix[2][3],更新为极小价;比较了

算法特点:1.用事先更新了之接触,来更新任何接触,直到任接触只是更新。

12:30:24

     2.未克缓解来负圈的图。


 

原创


  我们并不知道A是否要经过任何点间接到达B,所以不得不于,用A到B的一直途径和A先经过另外点

 

3 4 1

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

3 1 7

    【算法】Bellman-Ford算法(单源最差路径问题)(判断负圈)

5 7 10 0 

     2.请勿克缓解有负圈的图。

#define MAX_V 10000
#define MAX_E 50000 
int V;    //顶点数 
int d[MAX_V];            // d[i]表示i离源点的最短距离 
struct edge{  int to,cost;  };     
typedef pair<int, int> P;  //first是最短距离,second是顶点的编号 
vector <edge> G[MAX_V];   // 边集 

 

 

相关文章

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图