• 图的存储结构--邻接矩阵


    一、图的存储结构的概述

      一方面,由于图的结构比较复杂,任意两个顶点都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序存储结构,但其可以借助二维数组来表示元素之间的关系,即采用邻接矩阵表示法。

      另一方面,由于图的任意两个顶点都可能存在关系,因此,用链式存储表示图是很自然的事,图的链式存储有多种,有邻接表、十字链表和邻接多重表,应根据实际需要的不同选择不同的存储结构。

    二、四种邻接矩阵的c++代码实现

    (一)无向无权图的邻接矩阵代码

    1. 设计思路:

              两个顶点之间有边的话,记作1;无边的话,记作0

           2.代码展示:

    1. #include
    2. using namespace std;
    3. const int maxn=100;
    4. int mp[maxn][maxn];
    5. int V,E;//记作顶点数为V;边数为E
    6. int sx,ex;//记作起始点为sx,终点记作ex
    7. int i,j;
    8. int main(){
    9. cin>>V>>E;
    10. for(int i=0;i
    11. cin>>sx>>ex;
    12. mp[sx][ex]=1;
    13. mp[ex][sx]=1;
    14. }
    15. for(int i=0;i
    16. for(int j=0;j
    17. cout<
    18. cout<<" ";
    19. }
    20. cout<
    21. }
    22. return 0;
    23. }

    (二)有向无权图的邻接矩阵代码

    1.设计思路:

    在这里十分的简单扽进行设计,只需将一行代码进行注释

    2.代码展示:

    1. #include
    2. using namespace std;
    3. const int maxn=100;
    4. int mp[maxn][maxn];
    5. int E,V;//V代表的是顶点数,而M代表的是边数
    6. int sx,ex;//sx代表的是起点,而ex代表的是终点
    7. int i,j;
    8. int main(){
    9. cin>>E>>V;
    10. for(int i=0;i
    11. cin>>sx>>ex;
    12. mp[sx][ex]=1;
    13. //mp[sx][ex]=//将此行代码进行注释
    14. }
    15. for(int i=0;i
    16. for(int j=0;j
    17. cout<
    18. cout<<" ";
    19. }
    20. cout<
    21. }
    22. return 0;
    23. }

    (三)无向带权图的邻接矩阵代码

    1.设计思路:

    若两个顶点之间无线的话,记作为∞,两个定点之间有限的记作两个顶点的权值的大小。

    2.代码展示:

    1. #include
    2. using namespace std;
    3. const int maxn=100;
    4. int mp[maxn][maxn];
    5. int V,E;//V为顶点的个数,而边的个数
    6. int sx,ex,dis;//sx为起点,ex为终点,dis为两点之间的距离
    7. int i,j;
    8. int main(){
    9. cin>>E>>V;
    10. for(int i=0;i
    11. cin>>sx>>ex>>dis;
    12. mp[sx][ex]=dis;
    13. mp[ex][sx]=dis;
    14. }
    15. for(int i=0;i
    16. for(int j=0;j
    17. if(mp[i][j]) cout<
    18. else cout<<"∞";
    19. cout<<" ";
    20. }
    21. cout<
    22. }
    23. return 0;
    24. }

    (四)有向带权图的邻接矩阵代码

    1.设计思路:

    只需将无向带权图的一行代码删除即可

    1. #include
    2. using namespace std;
    3. const int maxn=100;
    4. int mp[maxn][maxn];
    5. int V,E;//V是总的顶点数 ,E是总的边数
    6. int sx,ex,dis;//sx为起点,ex为终点,dis为两点之间的距离
    7. int i,j;
    8. int main(){
    9. cin>>V>>E;
    10. for(int i=0;i
    11. cin>>sx>>ex>>dis;
    12. mp[sx][ex]=dis;
    13. //mp[ex][sx]=dis;
    14. }
    15. for(int i=0;i
    16. for(int j=0;j
    17. if(mp[i][j]) cout<
    18. else cout<<"∞";
    19. cout<<" ";
    20. }
    21. cout<
    22. }
    23. return 0;
    24. }

  • 相关阅读:
    Rancher 离线安装 longhorn 存储类
    线上问题:Harbor核心服务不可用
    伦敦金投资为什么要止损?
    蓝桥杯每日一题2023.10.3
    pytorch冻结参数训练的坑
    【MATLAB源码-第59期】基于matlab的QPSK,16QAM164QAM等调制方式误码率对比,调制解调函数均是手动实现未调用内置函数。
    YOLOV5学习笔记(七)——训练自己数据集
    春运“火车票难买”,用微信小程序抢到票的用户都笑了
    (四)Vue之数据绑定
    flutter3-winchat桌面端聊天实例|Flutter3+Dart3+Getx仿微信Exe程序
  • 原文地址:https://blog.csdn.net/qq_60498436/article/details/127693306