04图与网络

1.最短路

(1) 自己写的dijstra算法

  1. format compact;
  2. clc,clear all
  3. a=zeros(6);
  4. a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10;
  5. a(2,3)=15;a(2,4)=20;a(2,6)=25;
  6. a(3,4)=10;a(3,5)=20;
  7. a(4,5)=10;a(4,6)=25;
  8. a(5,6)=55;
  9. a=a+a'
  10. a(find(a==0))=inf %将a=0的数全部替换为无强大
  11. pb(1:length(a))=0;pb(1)=1; %当一个点已经求出到原点的最短距离时,其下标i对应的pb(i)赋1
  12. index1=1; %存放存入S集合的顺序
  13. index2=ones(1,length(a)); %存放始点到第i点最短通路中第i顶点前一顶点的序号
  14. d(1:length(a))=inf;d(1)=0; %存放由始点到第i点最短通路的值
  15. temp=1; %temp表示c1,算c1到其它点的最短路。
  16. while sum(pb)<length(a) %看是否所有的点都标记为P标号
  17. tb=find(pb==0); %找到标号为0的所有点,即找到还没有存入S的点
  18. d(tb)=min(d(tb),d(temp)+a(temp,tb));%计算标号为0的点的最短路,或者是从原点直接到这个点,又或者是原点经过r1,间接到达这个点
  19. tmpb=find(d(tb)==min(d(tb))); %求d[tb]序列最小值的下标
  20. temp=tb(tmpb(1));%可能有多条路径同时到达最小值,却其中一个,temp也从原点变为下一个点
  21. pb(temp)=1;%找到最小路径的表对应的pb(i)=1
  22. index1=[index1,temp]; %存放存入S集合的顺序
  23. temp2=find(d(index1)==d(temp)-a(temp,index1));
  24. index2(temp)=index1(temp2(1)); %记录标号索引
  25. end
  26. d, index1, index2
  1. a =
  2. 0 50 0 40 25 10
  3. 50 0 15 20 0 25
  4. 0 15 0 10 20 0
  5. 40 20 10 0 10 25
  6. 25 0 20 10 0 55
  7. 10 25 0 25 55 0
  8. a =
  9. Inf 50 Inf 40 25 10
  10. 50 Inf 15 20 Inf 25
  11. Inf 15 Inf 10 20 Inf
  12. 40 20 10 Inf 10 25
  13. 25 Inf 20 10 Inf 55
  14. 10 25 Inf 25 55 Inf
  15. d =
  16. 0 35 45 35 25 10
  17. index1 =
  18. 1 6 5 2 4 3
  19. index2 =
  20. 1 6 5 6 1 1

(2) 输入邻接矩阵带包

  1. format compact;
  2. % 输入邻接矩阵
  3. clc,clear
  4. a=zeros(7);
  5. a(1,2)=4;a(1,3)=2;
  6. a(2,3)=3;a(2,4)=4;a(2,5)=6;
  7. a(3,4)=5;a(3,6)=4;
  8. a(4,5)=2;a(4,6)=7;
  9. a(5,6)=4;a(5,7)=8;
  10. a(6,7)=3;
  11. b=sparse(a); % 构造稀疏矩阵
  12. [x,y,z]=graphshortestpath(b,1,7,'Directed',1,'Method','Bellman-Ford')
  13. % 有向图,Directed1为真,方法(Method)默认为Dijstra
  14. p=biograph(b,[],'showW','on');
  15. h=view(p);%显示各个路径权值
  16.  
  17. % 求节点1到节点5的最短路径
  18. [Dist,Path]=graphshortestpath(b,1,7)
  19.  
  20. % 将最短路径的结点以红色显示
  21. set(h.Nodes(Path),'Color',[1 0.4 0.4]);
  22. % 将最短路径的弧以红色显示
  23. edges=getedgesbynodeid(h,get(h.Nodes(Path),'ID'));
  24. set(edges,'LineColor',[1 0 0]);

(3) 输入节点和权重带包

  1. format compact;
  2. % 输入起点终点和边长
  3. tic
  4. R = [1,1,1,2,2,3,4]; % 起点节点
  5. C = [2,3,4,3,5,4,5]; % 终点节点
  6. W = [3,2,2,1,3,4,3]; % 对应权值
  7. g = digraph(R,C,W) % 创建图
  8. G1=sparse(R,C,W)
  9. [path,distance] = shortestpath(g,1,5); % 计算最短路
  10. plot(g)
  11. toc

  1. format compact;
  2. s = [1 1 2 2 3 4]; % 起始节点向量
  3. e = [2 3 4 5 5 5]; % 终止节点向量
  4. w = [1 4 2 3 2 2]; % 权向量
  5. g = sparse(s,e,w); % 构建稀疏矩阵
  6. g(5,5)=0; % 使稀疏矩阵其余元素为0
  7.  
  8. p=biograph(g,[],'ShowWeights','on');%建立有向图对象P
  9. h=view(p);%显示各个路径权值
  10.  
  11. % 求节点1到节点5的最短路径
  12. [Dist,Path]=graphshortestpath(g,1,5,'Method','Dijkstra')
  13.  
  14. % 将最短路径的结点以红色显示
  15. set(h.Nodes(Path),'Color',[1 0.4 0.4]);
  16. % 将最短路径的弧以红色显示
  17. edges=getedgesbynodeid(h,get(h.Nodes(Path),'ID'));
  18. set(edges,'LineColor',[1 0 0]);

  1. >> RCW01
  2. Dist =
  3. 4
  4. Path =
  5. 1 2 5

2.最小生成树

  1. format compact;
  2. clc,clear
  3. x=[0 5 16 20 33 23 35 25 10];
  4. y=[15 20 24 20 25 11 7 0 3];
  5. xy=[x;y] % xy 29
  6. d=mandist(xy) % xy的两两列向量间的绝对值距离(9个点两两的距离)
  7. d=tril(d) % 截取matlab工具箱要求的下三角矩阵
  8. G=sparse(d) % 转化为稀疏矩阵
  9. [ST,pred]=graphminspantree(G,'method','Kruskal') % 调用最小生成树命令
  10. st=full(ST) % 把最小生成树的稀疏矩阵转化为普通矩阵
  11. TreeLength=sum(sum(st)) % 求最小生成树的长度
  12. view(biograph(ST,[],'ShowArrows','off','ShowWeights','on')) % 画出最小生成树

  1. xy =
  2. 0 5 16 20 33 23 35 25 10
  3. 15 20 24 20 25 11 7 0 3
  4. d =
  5. 0 10 25 25 43 27 43 40 22
  6. 10 0 15 15 33 27 43 40 22
  7. 25 15 0 8 18 20 36 33 27
  8. 25 15 8 0 18 12 28 25 27
  9. 43 33 18 18 0 24 20 33 45
  10. 27 27 20 12 24 0 16 13 21
  11. 43 43 36 28 20 16 0 17 29
  12. 40 40 33 25 33 13 17 0 18
  13. 22 22 27 27 45 21 29 18 0
  14. d =
  15. 0 0 0 0 0 0 0 0 0
  16. 10 0 0 0 0 0 0 0 0
  17. 25 15 0 0 0 0 0 0 0
  18. 25 15 8 0 0 0 0 0 0
  19. 43 33 18 18 0 0 0 0 0
  20. 27 27 20 12 24 0 0 0 0
  21. 43 43 36 28 20 16 0 0 0
  22. 40 40 33 25 33 13 17 0 0
  23. 22 22 27 27 45 21 29 18 0
  24. G =
  25. (2,1) 10
  26. (3,1) 25
  27. (4,1) 25
  28. (5,1) 43
  29. (6,1) 27
  30. (7,1) 43
  31. (8,1) 40
  32. (9,1) 22
  33. (3,2) 15
  34. (4,2) 15
  35. (5,2) 33
  36. (6,2) 27
  37. (7,2) 43
  38. (8,2) 40
  39. (9,2) 22
  40. (4,3) 8
  41. (5,3) 18
  42. (6,3) 20
  43. (7,3) 36
  44. (8,3) 33
  45. (9,3) 27
  46. (5,4) 18
  47. (6,4) 12
  48. (7,4) 28
  49. (8,4) 25
  50. (9,4) 27
  51. (6,5) 24
  52. (7,5) 20
  53. (8,5) 33
  54. (9,5) 45
  55. (7,6) 16
  56. (8,6) 13
  57. (9,6) 21
  58. (8,7) 17
  59. (9,7) 29
  60. (9,8) 18
  61. ST =
  62. (2,1) 10
  63. (4,2) 15
  64. (4,3) 8
  65. (5,4) 18
  66. (6,4) 12
  67. (7,6) 16
  68. (8,6) 13
  69. (9,8) 18
  70. pred =
  71. 0 1 4 2 4 4 6 6 8
  72. st =
  73. 0 0 0 0 0 0 0 0 0
  74. 10 0 0 0 0 0 0 0 0
  75. 0 0 0 0 0 0 0 0 0
  76. 0 15 8 0 0 0 0 0 0
  77. 0 0 0 18 0 0 0 0 0
  78. 0 0 0 12 0 0 0 0 0
  79. 0 0 0 0 0 16 0 0 0
  80. 0 0 0 0 0 13 0 0 0
  81. 0 0 0 0 0 0 0 18 0
  82. TreeLength =
  83. 110

3.最大流

  1. format compact;
  2. % 最大流
  3. % 只能解决权重都为正值,且两个顶点之间不能有两条弧的问题
  4. % 本来a(3,4)=5,a(4,3)=2,增加虚拟节点9,删去a(4,3)=2,改为a(4,9)=2;a(9,3)=2;
  5.  
  6. clc,clear,a=zeros(9);
  7. a(1,2)=6;a(1,3)=4;a(1,4)=5;
  8. a(2,3)=3;a(2,5)=9;a(2,6)=9;
  9. a(3,4)=5;a(3,5)=6;a(3,6)=7;a(3,7)=3;
  10. a(4,7)=5;a(4,9)=2;
  11. a(5,8)=12;
  12. a(6,5);a(6,8)=10;
  13. a(7,6)=4;a(7,8)=15;
  14. a(9,3)=2;
  15. G=sparse(a);
  16. view(biograph(G,[],'ShowWeights','on')); % 建立有向图对象
  17. [x,y,z]=graphmaxflow(G,1,8) % 最大流量为x=15

matlab学习——04图与网络(最短路,最小生成树,最大流)的更多相关文章

  1. Paddle Graph Learning (PGL)图学习之图游走类模型[系列四]

    Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...

  2. 建模算法(五)——图与网络

    (一)图与网络的基本概念 一.无向图 含有的元素为顶点,弧和权重,但是没有方向 二.有向图 含有的元素为顶点,弧和权重,弧具有方向. 三.有限图.无限图 顶点和边有限就是有限图,否则就是无限图. 四. ...

  3. NASNet学习笔记——   核心一:延续NAS论文的核心机制使得能够自动产生网络结构;    核心二:采用resnet和Inception重复使用block结构思想;    核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。

    from:https://blog.csdn.net/xjz18298268521/article/details/79079008 NASNet总结 论文:<Learning Transfer ...

  4. 【GCN】图卷积网络初探——基于图(Graph)的傅里叶变换和卷积

    [GCN]图卷积网络初探——基于图(Graph)的傅里叶变换和卷积 2018年11月29日 11:50:38 夏至夏至520 阅读数 5980更多 分类专栏: # MachineLearning   ...

  5. 【学习笔记】Iperf3网络性能测试工具

    [学习笔记]Iperf3网络性能测试工具 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高. ...

  6. 最全面的图卷积网络GCN的理解和详细推导,都在这里了!

    目录 目录 1. 为什么会出现图卷积神经网络? 2. 图卷积网络的两种理解方式 2.1 vertex domain(spatial domain):顶点域(空间域) 2.2 spectral doma ...

  7. 深度学习——手动实现残差网络ResNet 辛普森一家人物识别

    深度学习--手动实现残差网络 辛普森一家人物识别 目标 通过深度学习,训练模型识别辛普森一家人动画中的14个角色 最终实现92%-94%的识别准确率. 数据 ResNet介绍 论文地址 https:/ ...

  8. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  9. Matlab 语谱图(时频图)绘制与分析

    Matlab 语谱图(时频图)绘制与分析 语谱图:先将语音信号作傅里叶变换,然后以横轴为时间,纵轴为频率,用颜色表示幅值即可绘制出语谱图.在一幅图中表示信号的频率.幅度随时间的变化,故也称" ...

随机推荐

  1. VS Code 常用插件配置

    Debugger for Chrome 该扩展可以在两种模式下运行--它可以启动(launch)导航到你的应用程序的Chrome实例,也可以附加(attach)到正在运行的Chrome实例.这两种模式 ...

  2. pandas模块的基本用法

    一.读取文件 import pandas as pd data = pd.read_csv("F:\\ml\\机器学习\\01\\score.csv") #一般读取的是csv文件, ...

  3. springMvc--接受请求参数

    作者:liuconglin 接收基本类型 表单: <h1>接受基本类型参数到Controller</h1> <form action="/param/test& ...

  4. 20191029 牛客CSP-S提高组赛前集训营1

    前一个小时看这几道题感觉要爆零 A. 仓鼠的石子游戏 分析一下发现a[i]>1a[i]>1a[i]>1时后先手必输,a[i]=1a[i]=1a[i]=1时先手必赢 然后直接看1的个数 ...

  5. Linux命令的详解

           cat /etc/passwd文件中的每个用户都有一个对应的记录行,记录着这个用户的一下基本属性.该文件对所有用户可读.               /etc/shadow  文件正如他 ...

  6. TDOA 之TDOA算法python实现

    这里指的TDOA算法,实际是解两个双曲线方程,由于两个二次方程设计东西较多,如果强解,计算量很大,从网上参考了如下链接: 算法推到:https://blog.csdn.net/lpsl1882/art ...

  7. 使用jQuery快速高效制作网页交互特效----jQuery中的事件与动画

    jQuery中的事件 和WinForm一样,在网页中的交互也是需要事件来实现的,例如tab切换效果,可以通过鼠标单击事件来实现. 事件在元素对象与功能代码中起着重要的桥梁作用. 在JQuery中,事件 ...

  8. 第三章 基本的bash shell命令

    1.硬链接:等同于引用了原文件,并未产生新的文件,不同的硬链接共用一个inode 2.符号链接:创建的是一个新文件,新文件指向原文件,因为是不同的文件,所以有不同的inode

  9. 带你了解HTTP协议(一)

    本篇文章篇幅比较长,先来个思维导图预览一下.   一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层   计算机网络体系结构分层 2.TCP/IP 通信传输流 利用 TCP/IP 协议族进行 ...

  10. c 字符串的结束标志

    //char carray[]="nihao"; char carray[]={'a','b','c','d','\0'}; printf("array=%s" ...