数学建模社区-数学中国

标题: 请各位看看,kruskal算法的代码错在哪儿啦? [打印本页]

作者: 且生    时间: 2013-8-23 12:08
标题: 请各位看看,kruskal算法的代码错在哪儿啦?
  1. function [Wt,Pp]=mintreek(n,W)
  2. % 图论中最小生成树 Kruskal 算法 及画图程序 M 函数
  3. % 格式[Wt,Pp]=mintreek(n,W):n为图顶点数,W为图的带权邻接矩阵,
  4. % 不构成边的两顶点之间的权用inf表示,显示最小生成树的边和顶点
  5. % Wt 为最小生成树的权,Pp(:,1:2)为最小生成树的两顶点,Pp(:,3)为
  6. % 最小生成树的边权,Pp(:,4)为最小生成树的序号;
  7. % 附图,红色连线为最小生成树
  8. tmpa=find(W~=inf);[tmpb,tmpc]=find(W~=inf);
  9. w=W(tmpa);e=[tmpb,tmpc];% w是W中非inf元素按列构成的向量
  10.                     %e的每一行元素表示一条边的两个顶点的序号
  11. [wa,wb]=sort(w);E=[e(wb,:),wa,wb];[nE,mE]=size(E);
  12. temp=find(E(:,1)-E(:,2));E=E(temp,:);
  13. P=E(1,:);k=length(E(:,1));
  14. while(rank(E)>0)
  15.     temp1=max(E(1,2),E(1,1));temp2=min(E(1,2),E(1,1));
  16.     for i=1:k;
  17.         if(E(i,1)==temp1),E(i,1)=temp2;end
  18.         if(E(i,2)==temp2),E(i,2)=temp2;end
  19.     end
  20.     a=find(E(:,1)-E(:,2));E=E(a,:);
  21.     if(rank(E)>0),P=[P;E(1,:)];k=length(E(:,1));end;
  22. end;
  23. Wt=sum(P(:,3));Pp=[e(P(:,4),:),P(:,3:4)];
  24. for i=1:length(P(:,3));%显示顶点vi与边ej
  25.     disp([' ','e',num2str(P(i,4)),'','(v',...
  26.         num2str(P(i,1)),'','v',num2str(P(i,2)),')']);
  27. end;
复制代码
我照着书抄下来的,在22行的时候始终过不去





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5