问题描述:
用图的邻接矩阵的方法存储一个图(图的节点是整数),然后对图进行深度优先遍历,输出图的深度优先遍历的序列,并输出其中最大的节点的值。
+-+
#include <iostream>
using namespace std;
int value=-30000;//用于查找所有节点中值最小的节点值
enum StatusCode {SUCCESS, FAIL, UNDER_FLOW, OVER_FLOW,RANGE_ERROR, DUPLICATE_ERROR,
NOT_PRESENT, ENTRY_INSERTED, ENTRY_FOUND, VISITED, UNVISITED
};
int DEFAULT_SIZE=100;
// 无向图的邻接矩阵类模板
template <class ElemType>
class AdjMatrixUndirGraph
{
protected:
// 邻接矩阵的数据成员:
int vexNum, edgeNum; // 顶点个数和边数
int **Matrix; // 邻接矩阵
ElemType *elems; // 顶点数据
StatusCode *tag; // 指向标志数组的指针
// 辅助函数模板:
void DestroyHelp(); // 销毁无向图,释放无向图占用的空间
void DFS(int v);
public:
//
// 抽象数据类型方法声明及重载编译系统默认方法声明:
AdjMatrixUndirGraph(ElemType es[], int vertexNum = DEFAULT_SIZE);
// 构造数据元素es[],顶点个数为vertexNum,边数为0的无向图
AdjMatrixUndirGraph(int vertexNum = DEFAULT_SIZE);
// 构造顶点个数为vertexNum,边数为0的无向图
~AdjMatrixUndirGraph(); // 析构函数模板
//
StatusCode GetElem(int v, ElemType &e) const;// 求顶点的元素,得到顶点元素的值
StatusCode SetElem(int v, const ElemType &e);// 设置顶点的元素值
//
int GetVexNum() const; // 返回顶点个数
int GetEdgeNum() const; // 返回边数
int FirstAdjVex(int v) const; // 返回顶点v的第一个邻接点
int NextAdjVex(int v1, int v2) const; // 返回顶点v1的相对于v2的下一个邻接点
//
void InsertEdge(int v1, int v2); // 插入顶点为v1和v2的边
void DeleteEdge(int v1, int v2); // 删除顶点为v1和v2的边
//
StatusCode GetTag(int v) const; // 返回顶点v的标志
void SetTag(int v, StatusCode val) const; // 设置顶点v的标志为val
//
void DFSTraverse();//深度优先遍历
//
AdjMatrixUndirGraph(const AdjMatrixUndirGraph<ElemType> ©); // 复制构造函数模板
AdjMatrixUndirGraph<ElemType> &operator =(const AdjMatrixUndirGraph<ElemType> ©);
// 重载赋值运算符
};
//
template <class ElemType>
void Display(const AdjMatrixUndirGraph<ElemType> &g, bool showVexElem); // 显示邻接矩阵无向图
//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 无向图的邻接矩阵类模板的实现部分
template <class ElemType>
AdjMatrixUndirGraph<ElemType>::AdjMatrixUndirGraph(ElemType es[], int vertexNum)
// 操作结果:构造数据元素es[],顶点个数为vertexNum,边数为0的无向图
{
if (vertexNum < 0)