详解数据结构——图之邻接矩阵表示法

本文介绍了图数据结构的基础知识,包括如何使用邻接矩阵表示图,以及深度优先搜索(DFS)和广度优先搜索(BFS)的遍历方法。在邻接矩阵中,0表示顶点间无边,非0值表示关系。同时讨论了图的顶点表示,通过bool或int数组标记访问状态。最后提到了图的最短路径问题,但未展开详细讲解。
摘要由CSDN通过智能技术生成

一、图的建立

图是表达“多对多”的关系的一种数据结构。

它由非空的有限顶点集合和有限边集合组成。

1. 顶点集合常常由数组表示。

数组下标表示顶点位置。

数组内容包含顶点数据,并且要添加判定是否被访问过的标志标量,为其余操作提供参数。

其数据类型定义如下:

struct Vertex {
    T data;
    bool isVisited;
}

2. 边集合的存储常用邻接矩阵或者邻接表。

边数值(权值)表示顶点之间有某种关系,0表示两个顶点之间没有边,也即没有关系。

邻接矩阵是一个二维数组,matrix[顶点数][顶点数]。也可定义为一个省一半空间的一维数组 n(n+1)/2,不利于理解,不作说明。

最简单的图用来呈现顶点之间的关系。顶点类型可以只包含一个用来判断是否被访问过的标志变量。用bool或者int数组表示顶点。

<pre name="code" class="cpp">//graph.h
#ifndef GRAGH_H
#define GRAGH_H

class Graph {
public:
Graph(const int &capacity);
~Graph();
void insertEdge(const int &indexA, const int &indexB, const int &weight = 1);

//成员变量只需要三个。
private:
int capacity; //图的顶点个数。
bool *pVertex; //存储图的顶点。
int *pMatrix; //存储图的边。
}

#endif

 

实现文件:

//graph.cpp
#include "graph.h"

/*
通过初始化列表建立一张图。
并对pVertex、pMatrix进行值初始化。
pVertex的每个元素值初始化为false,pMatrix的每个元素值初始化为0.
*/
inline
Graph::Graph(const int &capacity):
    capacity(capacity), 
    pVertex(new bool[capacity]()), 
    pMatrix(new int[capacity * capacity]()) {}

<span style="color:#808000;">inline</span><pre style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style="color:#800080;">Graph</span><span style="color:#000000;">::~</span><span style="color:#800080;">Graph</span><span style="color:#000000;">()</span><span style="color:#c0c0c0;"> </span><span style="color:#000000;">{</span>

    delete[] pVertex;
    delete[] pMatrix;
}

inline
void Graph ::insertEdge ( const int & indexA , const int & indexB , const int weight ) {
    //插入一条从A点指向B点的边。
    pMatrix[indexA * capacity + indexB] = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值