zoukankan      html  css  js  c++  java
  • 最短路径(Floyd)算法

    #include <stdio.h>
    #include <stdlib.h>

    /* Floyd算法 */

    #define VNUM 5
    #define MV 65536

    int P[VNUM][VNUM];
    int A[VNUM][VNUM];
    int Matrix[VNUM][VNUM] =
    {
        {0, 10, MV, 30, 100},
        {MV, 0, 50, MV, MV},
        {MV, MV, 0, MV, 10},
        {MV, MV, 20, 0, 60},
        {MV, MV, MV, MV, 0},
    };

    void Floyd()         // O(n*n*n)
    {
        int i = 0;
        int j = 0;
        int k = 0;
        //初始化
        for(i=0; i<VNUM; i++)
        {
            for(j=0; j<VNUM; j++)
            {
                A[i][j] = Matrix[i][j];
                P[i][j] = j; //保存路径(i---j的路径)
            }
        }
        //不停的中转
        for(i=0; i<VNUM; i++)
        {
            for(j=0; j<VNUM; j++)
            {
                for(k=0; k<VNUM; k++)
                {
                //若是小于原来的值
                    if( (A[j][i] + A[i][k]) < A[j][k] )
                    {
                 //更新A数组
                        A[j][k] = A[j][i] + A[i][k];
                        P[j][k] = P[j][i];//
                    }
                }
            }
        }
        //打印
        for(i=0; i<VNUM; i++)
        {
            for(j=0; j<VNUM; j++)
            {
                int p = -1;
                
                printf("%d -> %d: %d ", i, j, A[i][j]);
                
                printf("%d", i);
                
                p = i;
                
                do
                {
                    p = P[p][j]; //p到j的下一个顶点
                    
                    printf(" -> %d", p);
                } while( p != j);
                
                printf(" ");
            }
        }
    }

    int main(int argc, char *argv[])
    {
          Floyd();
        
        return 0;
    }

    说明:

    Floyd最短路径算法只是Dijkstra最短路径算法的加强, 其本质还是递推

  • 相关阅读:
    考研笔记-物理层协议
    考研笔记-数据链路层和局域网
    考研笔记-网络层和路由
    考研笔记-运输层服务和工作原理
    考研笔记-应用层
    考研笔记-数据通信技术基础
    考研笔记-计算机网络协议和体系结构
    计算机网络复习(一)
    “百度杯”CTF比赛 十月场_GetFlag(验证码爆破+注入+绝对路径文件下载)
    “技术产品”面向市场的表达方法思辨——BY Me
  • 原文地址:https://www.cnblogs.com/wxb20/p/6178804.html
Copyright © 2011-2022 走看看