Floyd算法优化

经典实现

void Floyd(){
    for(int k = 1; k <= N; k++){
        for(int i = 1; i <= N; i++){
            for(int j = 1; j <= N; j++){
                A[i][j] = min(A[i][j], A[i][k]+A[k][j]);
            }
        }
    }
    return ;
}

利用矩阵的对称性

void Floyd_1(){
    for(int k = 1; k <= N; k++){
        for(int i = 1; i <= N; i++){
            int t = A[i][k];
            for(int j = 1; j <= i; j++){
                A[i][j] = min(A[i][j], t+A[k][j]);
                A[j][i] = A[i][j];
            }
        }
    }
    return ;
}

只使用矩阵的下三角部分

void Floyd_2(){
    for(int k = 1; k <= N; k++){
        for(int i = 1; i <= N; i++){
            if(k != i){
                int t = (k

跳过不存在的路径

void Floyd_3(){
    for(int k = 1; k <= N; k++){
        for(int i = 1; i <= N; i++){
            if(k != i){
                int t = (k

避免大量调用数学函数

void Floyd_4(){
    for(int k = 1; k <= N; k++){
        for(int i = 1; i <= N; i++){
            if(k != i){
                int t = (k

你可能感兴趣的:(图论)