数据结构 图的邻接矩阵

数据结构 图的邻接矩阵图的邻接矩阵的存储方式是用两个数组来实现的,一个一维数组存储顶点信息,一个二维数组存储线(无向图)或弧(有向图)的信息。设图G有n个顶点,则邻接矩阵是一个n×n的方阵,定义为:无向图的邻接矩阵,两个顶点有边则为1,否则,为0;因为是无向图arc[i][j]=arc[j][i],所以矩阵为对称矩阵,对角线为自己到自己的边,邻接矩阵中,行之和或者列之和都为各顶点度的总数。设图G有是网图,有n个…

大家好,又见面了,我是你们的朋友全栈君。

图的邻接矩阵的存储方式是用两个数组来实现的,一个一维数组存储顶点信息,一个二维数组存储线(无向图)或弧(有向图)的信息。

设图G有n个顶点,则邻接矩阵是一个n × n的方阵,定义为:

数据结构 图的邻接矩阵

数据结构 图的邻接矩阵

无向图的邻接矩阵,两个顶点有边则为1,否则,为0;因为是无向图arc[i][j] = arc[j][i],所以矩阵为对称矩阵,对角线为自己到自己的边,邻接矩阵中,行之和或者列之和都为各顶点度的总数。

设图G有是网图,有n个顶点,则邻接矩阵是一个n × n的方阵,定义为:

数据结构 图的邻接矩阵

数据结构 图的邻接矩阵

无向网图和无向图差不多,就是加了权值,两个顶点之间无边的话距离是∞。

如果是有向图,邻接矩阵就不是对称矩阵了。

下面是邻接矩阵的存储结构:

#define MAXVERTEX 100   //图的最大顶点数
#define INFINITY 32767  //用有符号的int最大值表示无穷大
typedef char vertextype;    //定义定点的存储信息为字符型
typedef int arctype;    //定义边的权值为int型

//图的邻接矩阵的存储结构
typedef struct
{
    vertextype vertex[MAXVERTEX];   //顶点表
    arctype arc[MAXVERTEX][MAXVERTEX];  //邻接矩阵
    int vertexnum;  //图的当前顶点数
    int arcnum; //图的当前边数
}MGraph;

存储结构里面主要由四部分构成,

第一部分是一个一维数组存储的是顶点信息,

第二部分是邻接矩阵由二维数组组成,存储着各顶点彼此之间的关系,

第三部分和第四部分分别是当前图的顶点数和线数。

下面是具体的代码实现(注释的很详细了):

#include <iostream>
using namespace std;

#define MAXVERTEX 100   //图的最大顶点数
#define INFINITY 32767  //用有符号的int最大值表示无穷大
typedef char vertextype;    //定义定点的存储信息为字符型
typedef int arctype;    //定义边的权值为int型

//图的邻接矩阵的存储结构
typedef struct
{
    vertextype vertex[MAXVERTEX];   //顶点表
    arctype arc[MAXVERTEX][MAXVERTEX];  //邻接矩阵
    int vertexnum;  //图的当前顶点数
    int arcnum; //图的当前边数
}MGraph;

//创建无向网
void CreateMGraph(MGraph &G)
{
    cin >> G.vertexnum; //输入顶点数目
    cin >> G.arcnum;    //输入边数
    for(int i = 0; i < G.vertexnum; i++)    //输入顶点信息
        cin >> G.vertex[i];
    for(int i = 0; i < G.vertexnum; i++)    //将所有边初始化为无穷大
        for(int j = 0; j < G.vertexnum; j++)
            G.arc[i][j] = INFINITY;
    for(int k = 0; k < G.arcnum; k++)
    {
        int i, j, w;
        cin >> i >> j;  //输入构成边的两个顶点
        cin >> w;   //输入边所对应的权值
        G.arc[i][j] = w;
        G.arc[j][i] = G.arc[i][j];  //无向图的邻接矩阵为对称矩阵
    }
}

//打印邻接矩阵
void PrintfMGraph(MGraph G)
{
    for(int i = 0; i < G.vertexnum; i++)
    {
        for(int j = 0; j < G.vertexnum; j++)
            cout << G.arc[i][j] << '\t';
        cout << endl;
    }
}

//主函数
int main()
{
    MGraph G;
    CreateMGraph(G);
    PrintfMGraph(G);
    return 0;
} 

邻接矩阵的时间复杂度为O(n +  n^2 + e),其中n为顶点数,e为边数,去掉低阶和系数后,变为O(n^2)。

运行结果(根据上面第二个图输入的数据):

数据结构 图的邻接矩阵

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153994.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SqlBulkCopy – The given value of type String from the data source cannot be converted to type

    SqlBulkCopy – The given value of type String from the data source cannot be converted to typeSqlBulkCopy-ThegivenvalueoftypeStringfromthedatasourcecannotbeconvertedtotypeofthespecifiedtargetcolumn针对使用C#SqlBulkCopy对象遇到的问题总结1.批量插入excel数据遇到的类型转换问题2.去除非数据行以下是对应的解决办法及代码1….

    2022年7月20日
    17
  • 转载——visio密钥[通俗易懂]

    转载——visio密钥[通俗易懂]转自:https://blog.csdn.net/yangmingsen1999/article/details/84934620GR24B-GC2XY-KRXRG-2TRJJ-4X7DCVWQ6G-37WBG-J7DJP-CY66Y-V278X2T8H8-JPW3D-CJGRK-3HTVF-VWD83HMCVF-BX8YB-JK46P-DP3KJ-9DRB222WT8-GGT7M-7M…

    2022年8月13日
    9
  • 51单片机最小系统的检查

    51单片机最小系统的检查以STC89C52为例(洞洞板、蚀刻板都要检查,工厂打板部分步骤可省略)准备:万用表(调至电压档),单片机最小系统(需供电)1.测量单片机供电是否正常51单片机的P20脚为GND,P40脚为VCC,红表笔接VCC,黑表笔接地:如果结果不为5V(2.6V或者其他),考虑是电源的问题。1.1首先检查电源线,红表笔接正极,黑表笔接负极,显示为5V左右,电源线正常。考虑是电路板的问题1.2将电压表调至通断档(红黑表笔短接电压表鸣叫)。首先检查GND连接是否…

    2022年6月23日
    31
  • 算法:记忆化搜索「建议收藏」

    算法:记忆化搜索「建议收藏」概述记忆化搜索是一种典型的空间换时间的思想。记忆化搜索的典型应用场景是可能经过不同路径转移到相同状态的dfs问题。更明确地说,当我们需要在有层次结构的图(不是树,即当前层的不同节点可能转移到下一层的相同节点)中自上而下地进行dfs搜索时,大概率我们都可以通过记忆化搜索的技巧降低时间复杂度。例子:青蛙过河题目描述一只青蛙想要过河。假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。青蛙可以跳上石子,但是不可以跳入水中。给你石子的位置列表stones(用单

    2022年7月26日
    14
  • ireport连接oracle_sqlserver导入数据库

    ireport连接oracle_sqlserver导入数据库一:添加jdbc或者odbcjar包工具–>选项–>Classpath–>AddJAR二:创建数据库链接方式ReportDatasouces–>new–>DatabaseJDBCconnection填写对应的数据库信息test成功!最后save就ok了。…

    2025年10月22日
    4
  • 创建linux中的nginx+php7+mysql环境—-PHP7安装

    创建linux中的nginx+php7+mysql环境—-PHP7安装

    2021年10月26日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号