Floyd算法

Posted 一只特立独行的猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Floyd算法相关的知识,希望对你有一定的参考价值。

伪码描述:

//i到j经过k中转的最短路径
for(int k=1;k<=n;k++){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			graph[i][j]=min(graph[i][j],graph[i][k]+graph[j][k]);
		}
	}
}

模板题目:

#include<iostream>
#include<cstring>

using namespace std;

const int N = 205,INF = 1e9;

int m,n,q;
int graph[N][N];

void floyd(){
    for(int k=1;k<=n;k++){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                graph[i][j] = min(graph[i][j],graph[i][k]+graph[k][j]);
            }
        }
    }
}

int main(){
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i==j) graph[i][j]=0;
            else graph[i][j]=INF;
        }
    }
    while(m--){
        int a,b,c;
        cin>>a>>b>>c;
        graph[a][b]=min(graph[a][b],c);
    }
    floyd();
    while(q--){
        int a,b;
        cin>>a>>b;
        if(graph[a][b]<INF/2)
            cout<<graph[a][b]<<endl;
        else
            cout<<"impossible"<<endl;
    }
    return 0;
}

以上是关于Floyd算法的主要内容,如果未能解决你的问题,请参考以下文章

最短路之Floyd算法

如何在 Floyd-Warshall 算法中输出最短路径?

数学建模方法-Floyd算法

Floyd算法(最短路)

Floyd算法

图的最短路径算法-- Floyd算法