图的代码实现 (邻接矩阵)

Posted sihanlin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的代码实现 (邻接矩阵)相关的知识,希望对你有一定的参考价值。

本文的主要内容为:图的C++代码实现 (邻接矩阵法),主要为各个类的声明

 

边类

 1 // Author: SihanLin
 2 // FileName: Edge.h
 3 
 4 // 图的边类
 5 class CEdge{
 6 public:
 7     int from;   // 起点
 8     int to;     // 终点
 9     int weight; // 权值
10 
11     explicit CEdge(int from = -1, int to = -1, int weight = 0){    // 构造函数
12         this->from = from;
13         this->to = to;
14         this->weight = weight;
15     }
16 
17     virtual ~CEdge(){   // 析构函数
18         
19     }
20 };

 

图的抽象基类

 1 // Author: SihanLin
 2 // FileName: Graph.h
 3 
 4 // 图的抽象基类
 5 class CGraph{
 6 protected:
 7     static const int UNVISITED;  // 顶点不可访问 0
 8     static const int VISITED;    // 顶点可访问 1
 9 public:
10     int numVertex;  // 顶点个数
11     int numEdge;    // 边的个数
12     int* mark;      // 用于标记顶点是否已经被访问
13     int* inDegree;  // 用于记录顶点的入度
14 
15     explicit CGraph(int numVertex = 1); // 构造函数
16     virtual ~CGraph();                  // 析构函数
17 
18     int GetVerticesNum();
19     int GetEdgesNum();
20     int GetFromVertex(CEdge oneEdge);   // 获取边的起点
21     int GetToVertex(CEdge oneEdge);     // 获取边的终点
22     int GetWeight(CEdge oneEdge);       // 获取边的权值
23     bool IsEdge(CEdge oneEdge);         // 判断是否是边
24     void ResetMark();                   // 重新设置顶点是否被访问的记录
25 
26     // 纯虚函数
27     virtual CEdge FirstEdge(int oneVertex) = 0;             // 获取顶点的第一条边
28     virtual CEdge NextEdge(CEdge preEdge) = 0;              // 获取上一条边的下一条边
29     virtual void SetEdge(int from, int to, int weight) = 0; // 设置边
30     virtual void delEdge(int from, int to) = 0;             // 删除边
31 };

 

图的邻接矩阵实现类

 1 // Author: SihanLin
 2 // FileName: GraphAdjacentMatrix.h
 3 
 4 
 5 #include "Graph.h"
 6 
 7 // 图的邻接矩阵实现类
 8 class CGraphM : public CGraph{
 9 private:
10     int** matrix;  // 指向二维邻接矩阵的指针
11 public:
12     explicit CGraphM(int numVertex = 1);
13     ~CGraphM();
14 
15     CEdge FirstEdge(int oneVertex);                 // 找到顶点的第一条边
16     CEdge NextEdge(CEdge preEdge);                  // 找到一条边的下一条边
17     void SetEdge(int from, int to, int weight);     // 设置边
18     void delEdge(int from, int to);                 // 删除边
19 
20     void InitGraphM(int* pWArray2D);                // 初始化图
21 
22     void DFS(int oneVertex);    // 深度优先搜索
23     void BFS(int oneVertex);    // 广度优先搜索
24     void Visit(int oneVertex);  // 访问顶点
25 
26     void Travel(int startVertex = 0, int travelType = 0); // 周游接口合并
27 };

 

具体的功能实现放在下期文章,读者可先自行思考。

 

以上是关于图的代码实现 (邻接矩阵)的主要内容,如果未能解决你的问题,请参考以下文章

实验四 图的实现和应用 实验报告 20162305

数据结构 图的基本操作要C语言的完整代码!!

c++利用邻接矩阵存储方法实现图的存储与输出。

求算法,用邻接矩阵和邻接表创建一个图,实现深度和广度搜索,菜单形式,c语言的代码。无向无权的图。

实验四 -图的实现与应用

数据结构(二十九)图的邻接矩阵存储结构