深度优先遍历实例(C++)

本文介绍了使用C++编程语言,通过邻接矩阵来存储无向图,并实现深度优先遍历(DFS)算法。通过DFS遍历,输出图的节点序列并找到最大节点值。
摘要由CSDN通过智能技术生成
问题描述:
用图的邻接矩阵的方法存储一个图(图的节点是整数),然后对图进行深度优先遍历,输出图的深度优先遍历的序列,并输出其中最大的节点的值。
+-+
#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> &copy);    // 复制构造函数模板
    AdjMatrixUndirGraph<ElemType> &operator =(const AdjMatrixUndirGraph<ElemType> &copy);
    // 重载赋值运算符
};
//
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值