最长距离法和最短距离法例题

笔试够用就行,两个方法都是取所有数中最小的,区别在新类距离的选取,一个选大的一个选小的watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5YiY5paw5rqQODcw,size_20,color_FFFFFF,t_70,g_se,x_16

 

  • 19
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
以下是一个简单的 MATLAB 最短路径问题的例题和答案全解。 问题描述: 给定一个图,其中已知各个节点之间的距离,求从节点 1 到节点 5 的最短路径。 图示: 2 3 / \ / \ 1 4 6 \ / \ / 5 7 解答: 首先定义邻接矩阵,表示各个节点之间的距离: distance = [ 0 2 inf inf inf inf inf; 2 0 3 inf inf inf inf; inf 3 0 inf 6 inf inf; inf inf inf 0 4 3 inf; inf inf 6 4 0 inf 5; inf inf inf 3 inf 0 5; inf inf inf inf 5 5 0 ]; 其中,0 表示节点到自身的距离为 0,inf 表示节点之间没有连接或不可达。 使用 Dijkstra 算求解: 1. 初始化源节点和节点集: - 将源节点的距离设置为 0; - 将剩余节点的距离设置为 inf; - 将所有节点加入未访问集合。 nodes = [1 2 3 4 5 6 7]; %所有节点 start = 1; %源节点 L = inf(1,7); %距离 L(start) = 0; %源节点距离为 0 2. 进行循环,直到所有节点都被访问: - 从未访问集合中找到距离源节点最近的节点; - 更新其相邻节点的距离。 while ~isempty(nodes) %未访问节点不为空 [~,i] = min(L(nodes)); %距离最小的节点 node = nodes(i); %当前节点 nodes(i) = []; %将节点从未访问节点中删除 for j = find(distance(node,:)<inf) %相邻节点 L(j) = min(L(j),L(node)+distance(node,j)); %更新距离 end end 3. 输出从源节点到目标节点的最短路径: goal = 5; %目标节点 path = goal; %建立路径数组 while path(1) ~= start %路径搜索 for j = find(distance(path(1),:)<inf) %相邻节点 if L(j) == L(path(1))-distance(path(1),j) %路径上的距离 path = [j path]; %添加节点到路径 break end end end disp(['从节点 ',num2str(start),' 到节点 ',num2str(goal),' 的最短路径为:',num2str(path)]); disp(['距离为 ',num2str(L(goal))]); 输出结果: 从节点 1 到节点 5 的最短路径为:1 2 3 4 5 距离为 9 因此,从节点 1 到节点 5 的最短路径为 1-2-3-4-5,距离为 9。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘新源870

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值