www.whkt.net > 弗洛伊德算法图解

弗洛伊德算法图解

floyd是求任意两点之间的最短距离.要经过所有点的话可以用蚁群算法,模拟退火算法,遗传算法.

function [d,r]=floyd(a) %floyd.m %采用floyd算法计算图a中每对顶点最短路 %d是矩离矩阵 %r是路由矩阵 n=size(a,1); d=a; for i=1:n for j=1:n r(i,j)=j; end end r for k=1:n for i=1:n for j=1:n if d(i,k)+d(k,j) d(i,j)=d(i,k)+d(k,j); r(i,j)=r(i,k) end end end k d r end

是地信的题吧,先给你说v1怎么求,先找出v1能去的最近的点,为V2,如果S1i>S12+S2i修改V1到Vi的距离为S12+S2i然后去掉V2,在其余的点中找距V1最近的,按上面的方法修改最后得到V1与其他各点的最短距离同样的方法求出到其他点的最短距离

#include<cstdio>#include<cstdlib>using namespace std;int map[105][105];int main(){ int m,n,i,j,k,x,y,a,b,t; scanf("%d",&n,&m); for(i=1;i<=n;i++) for(j=1;j<=n;j++) map[i][j]=999999999; for(i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&t); map[x][y]=t; }

clear;clc;n=6; a=zeros(n);a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10;a(2,3)=15;a(2,4)=20;a(2,6)=25; a(3,4)=10;a(3,5)=20;a(4,5)=10;a(4,6)=25; a(5,6)=55;a=a+a'; M=max(max(a))*n^2; %M为充分大的正实数a=a+((a==0)-eye(n))*M;path=zeros(n);for k=

1.dijkstra 不能有负权边,否则结果是错的,你想想,假如无向图有1,2,3个点,w(1,2)=1,w(1,3)=2,w(2,3)=-2.按dij算法求求看.2.这句话还没找到反例不过教floyd时说是用在非负权边上的,除了负的回路之外应该还有漏洞吧..

4条路径 4个顶点编号为1,2,3,41-->4 14-->3 34-->2 12-->3 1(后面为路段长度)djkstra 是从已经确定较短路径的点出发扩展.

带权的无向图的最短路径又叫最小生成树,Prim算法和Kruskal算法;带权的有向图的最短路径算法有迪杰斯特拉算法和佛洛依德算法;

堆排序1991年计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了著名的堆排序算法HEAPSORT http://202.207.12.200/whjc/jisuanjifazhanshi/xianqu/65.htm1、

网站地图

All rights reserved Powered by www.whkt.net

copyright ©right 2010-2021。
www.whkt.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com