一、图的建立
图是表达“多对多”的关系的一种数据结构。
它由非空的有限顶点集合和有限边集合组成。
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] =