想讨论一个指定必经节点求最短路径思路,大伙有什么思路没有?

想讨论一个指定必经节点求最短路径思路,大伙有什么思路没有?

例如,有一个如下的图。 需要求从A到Z必经6的最短路由, 如果计算从A到6的最短路由会计算出A--1---7---6,挡住了6到Z的路


A-------1-------------------------------7------------Z

           *                                      *

           *                                      *

           2--------3------4------5------6

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的最短路径问题的 Matlab 代码,使用 Dijkstra 算法来找到经过必经点的最短路径。 ```matlab function [dist, path] = shortestPathWithMandatories(graph, start, goal, mandatories) % graph: n x n 邻接矩阵,表示图的边 % start: 起点 % goal: 终点 % mandatories: 必经点的索引 % dist: 起点到终点的最距离 % path: 最短路径 n = size(graph, 1); visited = false(n, 1); % 记录节点是否已经访问过 dist = inf(n, 1); % 记录起点到节点的距离 prev = zeros(n, 1); % 记录节点的前一个节点 visited(start) = true; dist(start) = 0; while ~visited(goal) minDist = inf; current = -1; % 找到距离起点最近的未访问节点 for i = 1:n if ~visited(i) && dist(i) < minDist current = i; minDist = dist(i); end end if current == -1 error('无法到达终点'); end % 更新当前节点的邻居 for i = 1:n if graph(current, i) > 0 alt = dist(current) + graph(current, i); if alt < dist(i) dist(i) = alt; prev(i) = current; end end end visited(current) = true; end % 计算最短路径 path = []; current = goal; while current ~= start path = [current path]; current = prev(current); end path = [start path]; % 检查是否经过了必经点 for i = 1:length(mandatories) if ~ismember(mandatories(i), path) error('没有经过必经点'); end end end ``` 这个函数接受邻接矩阵、起点、终点和必经点的索引,然后返回最短路径和距离。如果没有找到路径或者路径没有经过所有必经点,函数会抛出异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值