深度优先遍历
算法代码:
// main.cpp
// DFS简版
// Created by apple on 2018/1/2.
// Copyright © 2018年 apple. All rights reserved.
// 关键词:无向图,邻接矩阵,深度优先遍历
#include<iostream>
using namespace std;
//默认值
int value=-10000;//用于最后找节点最大值
int DEFAULT_SIZE=100;//二维矩阵默认大小值
enum StatusCode {SUCCESS,FAIL,UNDER_FLOW,OVER_FLOW,RANGE_ERROR,DUPLICATE_ERROR,
NOT_PRESENT,ENTRY_INSERTED,ENTRY_FOUND,VISITED,UNVISITED
};//可供选择的Tag标记值
//AdjMatrixUndirGraph类
class AdjMatrixUndirGraph{
protected:
//
int vexNum,edgeNum;//记录图中节点数与边数
int **Matrix;//邻接矩阵
int *elems;//用于存放节点的数组
StatusCode *tag;//实际作用标记每个节点的Tag值,即是否遍历
//
void DestroyHelp();//用于析构函数
void DFS(int v);//深度遍历
public:
//构造函数与析构函数
AdjMatrixUndirGraph(int es[],int vx=DEFAULT_SIZE);
AdjMatrixUndirGraph(int vx=DEFAULT_SIZE);
~AdjMatrixUndirGraph();
//用于得到每个节点的实际值或者赋给每个节点实际值
StatusCode GetElem(int v,int &e);
StatusCode SetElem(int v,const int &e);
//各类返回值,用于对外接口
int GetVexNum();//返回节点数
int GetedgeNum();//返回边数
int FirstAdjVex(int v);//返回有关系的节点
int NextAdjVex(int v1,int v2);//返回有关系的下一节点
//
void InsertEdge(int v1,int v2);//对两个节点间插入边,加上关系
void DeleteEdge(int v1,int v2);//对两个节点间减去边,减掉关系
//
StatusCode GetTag(int v);//返回当前节点的Tag值,即判断是否被访问
void SetTag(int v,StatusCode val);//设置当前