matlab实现dijkstra、floyd、kruskal
来源:互联网 发布:怎么开通淘宝直通车 编辑:程序博客网 时间:2024/04/30 04:12
dijkstra
clc,cleara=zeros(6); %邻接矩阵初始化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';a(find(a==0))=inf;%不可通置为无穷pb(1:length(a))=0;pb(1)=1;index1=1;index2=ones(1,length(a));%pb标记是否访问过,index1用来记录每次找到的到达的最小顶点,index2用来记录对应顶点来自哪个点d(1:length(a))=inf;d(1)=0;%d用来记录最后要求的结果temp=1; %最新的P标号的顶点while sum(pb)<length(a) tb=find(pb==0); d(tb)=min(d(tb),d(temp)+a(temp,tb));%d[y]=min{d[y],d[x]+w(x,y)} tmpb=find(d(tb)==min(d(tb))); temp=tb(tmpb(1)); %可能有多个点同时达到最小值,只取其中的一个 pb(temp)=1; index1=[index1,temp]; temp2=find(d(index1)==d(temp)-a(temp,index1)); index2(temp)=index1(temp2(1));endd, index1, index2floyd
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'; a(a==0)=inf; %把所有零元素替换成无穷a([1:n+1:n^2])=0; %对角线元素替换成零,Matlab中数据是逐列存储的path=zeros(n);for k=1:n%如果k放在里面,造成过早的把A到B的最短路径确定下来了 for i=1:n for j=1:n if a(i,j)>a(i,k)+a(k,j) a(i,j)=a(i,k)+a(k,j); path(i,j)=k; end end endenda, pathresult=a(1,:)
kruskal
clc;clear;a=zeros(7);a(1,2)=50; a(1,3)=60; a(2,4)=65; a(2,5)=40;a(3,4)=52;a(3,7)=45; a(4,5)=50; a(4,6)=30;a(4,7)=42; a(5,6)=70; a=a+a';[i,j,b]=find(a);%find(A)返回矩阵A中非零元素所在位置,[i,j,b]表示i行j列值b不为0data=[i';j';b'];index=data(1:2,:);%'表示转置放,index表示不为零的所有顶点坐标映射集合(二维)loop=length(a)-1;result=[];while length(result)<loop temp=min(data(3,:));%取出所有权值最小的 flag=find(data(3,:)==temp);%找到他的位置 flag=flag(1);%取第一个 v1=index(1,flag);v2=index(2,flag);%取出起点或者终点为它的 if v1~=v2%如果不是本身到本身(圈) result=[result,data(:,flag)];%连接 end index(find(index==v2))=v1;%去 data(:,flag)=[]; index(:,flag)=[];endresult
0 0
- matlab实现dijkstra、floyd、kruskal
- 图论所有的算法实现。DFS,BFS,Dijkstra,Floyd,Topsort,Kruskal,Prim,
- dijkstra和floyd简单实现
- Dijkstra算法和Floyd算法的实现
- Dijkstra &&Floyd
- Dijkstra Floyd
- Dijkstra Floyd
- floyd&&dijkstra
- Dijkstra&&Floyd
- dijkstra ,floyd
- 图(Graph)——最小生成树、最短路径、Kruskal、Dijkstra、Floyd
- 最小生成树算法(Prime、Kruskal)和最短路径算法(Dijkstra、Floyd)
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- 图(Graph)——最小生成树、最短路径、Kruskal、Dijkstra、Floyd
- 整合:求最短路算法 floyd prim dijkstra Kruskal spfa算法简析
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- centos 下安装xdebug以便netbeans调试PHP
- 智慧家庭
- mini2440 简单touch screen驱动程序
- class-new()函数, static or automatic(systemverilog)
- sed命令详解
- matlab实现dijkstra、floyd、kruskal
- Combinations
- linux grep命令详解
- java专题——B+树,B-树
- 程序员常识--OJ系统及ACM测试题库大全
- Pollard Rho 大整数分解
- Laravel 上传文件报找不到临时文件的问题
- [7] 算法之路 - 快速排序之3轴演算
- Sort List @leetcode