奥普瓯江 发表于 2023-5-22 11:22:22

最短路径(佛洛依德算法-floyed)

原理:




备注:




算法:

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

#define MAX 65535

int KA = {{0, 2, 6, 4}, {MAX, 0, 3, MAX}, {7, MAX, 0, 1}, {5, MAX, 12, 0}};


int main()
{
    //佛洛依德算法需要经过3个for循环第一个

    for(int k = 0; k < 4; k++)          //这个循环是他经过的那个节点
    {
      for(int i = 0; i < 4; i++)      //从经过的那个节点开始横向比较
      {
         for(int j = 0; j < 4; j++)   //从经过的那个节点开始竖向比较
         {
               if((i != j) && (i != k) && (j != k) &&KA > KA + KA)      //比较的前提是i不等于j、i不等于k、j不等于k,总体含义是自己不等于自己,这可以减少运算,然后才是判断竖排的数与横向的数相加是否小于没格循环的数如果小于那就执行,替换掉i-j单元中的数据
               {
                   KA = KA + KA;                                          //数据替换
               }

         }
      }

    }

    for(int i = 0; i < 4; i++)
    {
      for(int j = 0; j < 4; j++)
      {
            printf("%d ", KA);
      }
      putchar('\n');
    }



    return 0;
}


输出结果:


yinda_peng 发表于 2023-5-22 15:24:14

顶,离散数学知识
页: [1]
查看完整版本: 最短路径(佛洛依德算法-floyed)