前言
在《无向图相关算法基础(java实现)》的博文中,用java实现了无向图的基础算法,本文通过c++实现。
前文已经将无向图基础算法的概念描述的很清楚,本文不再累述,直接上代码。
代码
本文涉及到的类如下:
- Undigraph.h 无向图类,用于无向图的创建。
Undigraph.cpp - BreadthFirstSearch.h 广度优先类,提供广度优先算法及两点间最短路径算法。
BreadthFirstSearch.cpp - TestMain.cpp 主函数,用于测试。
以上类,在VS2008开发环境测试通过,具体代码如下:
Undigraph.h:
#ifndef Undigraph_H
#define Undigraph_H
/*-------------------------------------------------------------------------------------------------------------------------
程序名称:Undigraph
2016年12月
描述:创建无向图邻接链表数据结构
//------------------------------------------------------------------------------------------------------------------------*/
/*------------------------------------------------------【头文件】---------------------------------------------------------
描述:包含程序所依赖的头文件
//------------------------------------------------------------------------------------------------------------------------*/
#include <list>
using namespace std;
/*------------------------------------------------------【类声明】---------------------------------------------------------
描述:无向图邻接链表类,用于创建无向图邻接链表数据结构
//------------------------------------------------------------------------------------------------------------------------*/
class Undigraph
{
private:
int verticals;//顶点个数
int edges;//边的个数
list<int> *AdjacencyGraph;//指向邻接链表的指针
public:
/**/
Undigraph(int vertical);//构建函数,根据参数“vertical”构建邻接链表,类型为list<int>[vertical],vertical为顶点个数,此时list<int>都为空,调用AddEdge()函数添加边后,完成整个邻接链表的创建。
int GetVerticals();//返回顶点个数
int GetEdges();//返回边个数
void AddEdge(int verticalStart,int verticalEnd);//根据参数“verticalStart”、“verticalEnd”,在无向图中录入边数据,完成无向图的邻接链表数据结构。
list<int>* GetAdjacencyGraph(int vetical);//根据参数"vetical"返回该顶点的邻接表
void PrintGraph();//打印该无向图
};
#endif
Undigraph.cpp:
#include "Undigraph.h"
/*------------------------------------------------------【Undigraph()构造函数】---------------------------------------------
描述:根据参数“vertical”,创建邻接链表
参数:1:int vertical(图的顶点个数)
其它:执行该函数后,构建的数据结构如下:
0
1
2
3
4
5
6
//-------------------------------------------------------------------------------------------------------------------------*/
Undigraph::Undigraph(int vertical)
{
this->verticals = vertical;
this->edges = 0;
AdjacencyGraph = new list<int>[this->verticals];
}
/*------------------------------------------------------【GetVerticals() 函数】---------------------------------------------
描述:返回图的顶点个数
参数:
返回值:图的顶点个数
//-------------------------------------------------------------------------------------------------------------------------*/
int Undigraph::GetVerticals()
{
return verticals;
}
/*--------------------------------