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


    一、图的存储结构的概述

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

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

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

  • 相关阅读:
    【概率论与数理统计】
    双非一本 大一 就业方向选择
    scratch大鱼吃小鱼 电子学会图形化编程scratch等级考试二级真题和答案解析2022年6月
    数据库DQL数据查询语言
    基于Java毕业设计医友医院信息管理源码+系统+mysql+lw文档+部署软件
    free(): double free detected in tcache 2
    小波神经网络的基本原理,小波神经网络设计方案
    STC单片机26——串口发送DS18B20温度值
    STM32实战总结:HAL之RTC
    Linux入门学习12
  • 原文地址:https://blog.csdn.net/qq_60498436/article/details/127693306