Library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub maguroplusia/Library

:heavy_check_mark: Warshall-Floyd
(Graph/WarshallFloyd.cpp)

説明

重み付き(有向)グラフにおける全頂点間の最短距離を求める。

tips : このアルゴリズムは負の辺でも動作する。返り値の配列をretとすると、ret[i][i] < 0となるiが存在するならばグラフには負閉路が含まれている。

Verified with

Code

vector<vector<long long>> WarshallFloyd(const int& N,const vector<vector<long long>> dist) {
    vector<vector<long long>> ret = dist;
    for(int k = 0;k < N;k++) {
        for(int i = 0;i < N;i++) {
            for(int j = 0;j < N;j++) {
                if(ret[i][k] != INF && ret[k][j] != INF) {
                    chmin(ret[i][j],ret[i][k] + ret[k][j]);
                }
            }
        }
    }
    return ret;
}
#line 1 "Graph/WarshallFloyd.cpp"
vector<vector<long long>> WarshallFloyd(const int& N,const vector<vector<long long>> dist) {
    vector<vector<long long>> ret = dist;
    for(int k = 0;k < N;k++) {
        for(int i = 0;i < N;i++) {
            for(int j = 0;j < N;j++) {
                if(ret[i][k] != INF && ret[k][j] != INF) {
                    chmin(ret[i][j],ret[i][k] + ret[k][j]);
                }
            }
        }
    }
    return ret;
}
Back to top page