当前位置:   article > 正文

图论相关代码(matlab)

图论相关代码(matlab)

Dijkstra算法步骤


(1)构造邻接矩阵
(2)定义起始点
(3)运行代码

  1. M=[  0     5     9   Inf   Inf   Inf   Inf
  2.    Inf     0   Inf   Inf    12   Inf   Inf
  3.    Inf     3     0    15   Inf    23   Inf
  4.    Inf     6   Inf     0   Inf     8     7
  5.    Inf    12   Inf     5     0   Inf    14
  6.    Inf   Inf   Inf   Inf   Inf     0    10
  7.    Inf   Inf   Inf   Inf   Inf   Inf     0];
  8. first=2;
  9. last=4;
  10. [m,n]=size(M);
  11. L=zeros(1,m);
  12. symbol=zeros(1,m);
  13. direction=zeros(1,m);
  14. for i=1:m
  15.     if(i~=first)
  16.         L(i)=inf;
  17.     end
  18.     direction(i)=first;
  19. end
  20. judge=1;
  21. while judge
  22. for i=1:m
  23.     if(symbol(i)==0)
  24.         min=L(i);
  25.         temporary=i;
  26.         break
  27.     end
  28. end
  29. for i=1:m
  30.     if(symbol(i)==0)
  31.         if(L(i)<min)
  32.             min=L(i);
  33.             temporary=i;
  34.         end
  35.     end
  36. end
  37. k=temporary;
  38. for j=1:m
  39.     if(symbol(1,j)==0)
  40.         if(M(k,j)==inf)
  41.             continue;
  42.         else
  43.             if(L(k)+M(k,j)<L(j))
  44.                 L(j)=L(k)+M(k,j);
  45.                 direction(j)=k;
  46.             end
  47.         end
  48.     end
  49. end
  50. symbol(k)=1;
  51. num=0;
  52. for i=1:m
  53.     if(symbol(i)==1)
  54.         num=num+1;
  55.     end
  56. end
  57. if(num==m)
  58.     judge=0;
  59. end
  60. end
  61. p=last;
  62. arrow=zeros(1,m);
  63. arrow(1)=last;
  64. i=2;
  65. while p~=first
  66.     arrow(1,i)=direction(p);
  67.     i=i+1;
  68.     p=direction(p);
  69. end
  70. distance=L(last);

floyd 算法代码

  1. d=[inf 6 0 4 0 0 0
  2.    0 inf 0 0 5 0 0
  3.    4 7 inf 0 0 5 0
  4.    0 0 4 inf 0 3 0
  5.    0 0 2 0 inf 0 0
  6.    0 0 0 0 4 inf 5
  7.    0 0 0 0 6 0 inf];
  8. [m,n]=size(d);
  9. first=1;
  10. last=7;
  11. direction=zeros(m,m);
  12. for i=1:m
  13.     direction(:,i)=i;
  14. end
  15. for i=1:m
  16.     for j=1:m
  17.         for k=1:m
  18.             small=min(d(i,k),d(k,j));
  19.             if d(i,j)<small
  20.                 d(i,j)=small;
  21.                 direction(i,j)=direction(i,k);
  22.             end
  23.         end
  24.     end
  25. end
  26. arrow=zeros(1,m);
  27. arrow(1)=first;
  28. i=2;
  29. p=first;
  30. while p~=last
  31.     p=direction(p,last);
  32.     arrow(i)=p;
  33.     i=i+1;
  34. end

生成树算法代码


 

  1. M=[ 0 17 11 inf inf inf
  2.     17 0 13 12 28 15
  3.     11 13 0 inf 19 inf
  4.     inf 12 inf 0 inf 16
  5.     inf 28 19 inf 0 10
  6.     inf 15 inf 16 10 0];
  7. [m,n]=size(M);
  8. X=zeros(m,n);
  9. Y=zeros(m);
  10. Z=zeros(m);
  11. Y(1)=1;
  12. for i=2:m
  13.     Z(i)=i;
  14. end
  15. judge=1;
  16. while judge
  17. for i=1:m
  18.     if(Y(i)~=0)
  19.         for j=1:m
  20.             if(Z(j)~=0)
  21.                 min=M(i,j);
  22.                 a=i;
  23.                 b=j;
  24.             end
  25.         end
  26.     end
  27. end
  28. for i=1:m
  29.     if(Y(i)~=0)
  30.         for j=1:m
  31.             if(Z(j)~=0)
  32.                 if(M(i,j)<min)
  33.                     min=M(i,j);
  34.                     a=i;
  35.                     b=j;
  36.                 end
  37.             end
  38.         end
  39.     end
  40. end
  41. Y(b)=b;
  42. Z(b)=0;
  43. X(a,b)=1;
  44. X(b,a)=1;
  45. c=0;
  46. for i=1:m
  47.     if(Y(i)~=0)
  48.         c=c+1;
  49.     end
  50. end
  51. if(c==m)
  52.     judge=0;
  53. end
  54. end

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/341410
推荐阅读
相关标签
  

闽ICP备14008679号