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


    一、图的存储结构的概述

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

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

    二、四种邻接矩阵的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. }

  • 相关阅读:
    (课程笔记)C++后端知识点大纲
    vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
    sql server [使用游标] 将表数据打印成sql insert语句
    LabVIEW什么时候需要使用DLL封装 Calling External APIs
    编译+链接和预处理
    虹科示波器 | 汽车免拆检测 | 2017款路虎发现车行驶中发动机抖动且加速无力
    Java面试题大全带答案
    二进制的形式在内存中绘制一个对象实例
    【笔记】ssh link-local 地址登录
    【开发环境】PX4无人机实物使用视觉或运动捕捉系统进行位置估计
  • 原文地址:https://blog.csdn.net/qq_60498436/article/details/127693306