Floyd 算法介绍

是解决给定的加权图中顶点间的最短路径的一种算法,可正确处理有向图的最短路径问题
是一个基于贪心、动态规划,求一个图中 所有点到所有点 最短路径的算法

Floyd算法详解 通俗易懂
最短路径问题—Floyd算法详解

Floyd.m
clc
clear
close all

t0=cputime;
%% 栅格界面、场景定义
% 行数和列数
rows = 20;
cols = 30;
[field, cmap] = defColorMap(rows, cols);

% 起点、终点、障碍物区域
startPos = 2;
goalPos = rows * cols - 2;
field(startPos) = 4;
field(goalPos) = 5;

%% 算法初始化
n = rows * cols;        % 栅格节点总个数
map = inf(n, n);        % 所有节点间的距离map
path = cell(n ,n);      % 存放对应的路径
for startNode = 1 : n
    if field(startNode) ~= 2
        neighborNodes = getNeighborNodes(rows, cols, startNode, field);
        for i = 1 : 8
            if ~(isinf(neighborNodes(i, 1)) || isinf(neighborNodes(i, 2)))
                neighborNode = neighborNodes(i, 1);
                map(startNode, neighborNode) = neighborNodes(i, 2);
                path{startNode, neighborNode} = [startNode, neighborNode];
            end
        end
    end
end
for i = 1 : n
    for j = 1 : n
        if  j ~=i
            for k = 1 : n
                if k ~= i && k ~= j
                    if map(j, i) + map(i, k) < map(j, k)
                        map(j, k) = map(j, i) + map(i, k);
                        path{j, k} = [path{j, i}, path{i, k}(2 : end)];
                    end
                end
            end
        end
    end
end

elapsed_time=cputime-t0
%% 画栅格界面
% 找出目标最优路径
path_opt = path{startPos, goalPos};
field(path_opt(2 : end - 1)) = 6;

% 画栅格图
image(1.5, 1.5, field);
grid on;
set(gca, 'gridline', '-', 'gridcolor', 'k', 'linewidth', 2, 'GridAlpha', 0.5);
set(gca, 'xtick', 1 : cols + 1, 'ytick', 1 : rows + 1);
axis image;

请添加图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐