无约束条件下克鲁斯卡尔(Kruskal)算法—Matlab 实现
算法描述:
K0:起始,置邻接矩阵为全零阵。把所有边按长度排成有序的队列,取最短
边11,与相关联的端构成子图1={1,1},并在边的队列中删去这条边,置
11=11=1。
K1:设已取 r 条边、r+1 个端所构成的子图,在所剩的边队列中取最短的
边,检查加上这条边后是否有环,也就是这边的两个端是否已在中。若有环,
删去这条边,继续取最短的,直到不形成环。设此时所取的边长为,则得+1=
∪{,},置==1。
K2:若r
V=0;%×î¶Ì·¾¶µÄȨֵºÍ
Path=zeros(2,len-1);%×î¶Ì·¾¶µÄÁ¬·¨
%ÏÂÃæ¶¨ÒåGÓÃÓÚÅжÏÊÇ·ñÐγɻ·,GΪ1->n±íʾ1->n¸ö¶Ëµã
%±¾ÈË˼ÏëÊǽ«ÒÑÁ¬½ÓµÄÁ½¶Ë¹éΪһ¸ö²¿·Ö£¬¼´½«ÒÑÁ¬½ÓµÄ¶ËµãÖÃΪÏàͬ£¬±ãÓÚ
ÓëÆäËûδÁ¬½Ó¶ËµãÇø·Ö
G=1:len;
r=1;%Ñ-»·´ÎÊý¼Ç¼
t=1;%Path²½½ø¼Ç¼
while r