鱼C论坛

 找回密码
 立即注册
查看: 859|回复: 1

[学习笔记] 最短路径(佛洛依德算法-floyed)

[复制链接]
发表于 2023-5-22 11:22:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原理:




备注:




算法:
#include <stdio.h>
#include <stdlib.h>

#define MAX 65535

int KA[4][4] = {{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[i][j] > KA[i][k] + KA[k][j])      //比较的前提是i不等于j、i不等于k、j不等于k,总体含义是自己不等于自己,这可以减少运算,然后才是判断竖排的数与横向的数相加是否小于没格循环的数如果小于那就执行,替换掉i-j单元中的数据
               {
                   KA[i][j] = KA[i][k] + KA[k][j];                                          //数据替换
               }

           }
        }

    }

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



    return 0;
}

输出结果:


cb_console_runner_bFJgIY51uF.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-22 15:24:14 | 显示全部楼层
顶,离散数学知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 00:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表