-DepthFirstDirectedPaths 深度优先搜索
解决单点有向路径。给定一幅有向图和一个起点s,回答“从s到给定目的顶点v是否存在一条有向路径?如果有,请找出这条路径”等类似问题。
#ifndef __DEPTH_FIRST_PATHS_H__
#define __DEPTH_FIRST_PATHS_H__
#include "Digraph.h"
#include <stack>
class DepthFirstDirectedPaths {
private:
bool* marked; // 是否标记过
int* edgeTo; // 指向索引的点
int start; // 起点
public:
DepthFirstDirectedPaths(const Digraph& G, int s);
~DepthFirstDirectedPaths() { delete[] marked; delete[] edgeTo; }
bool hasPathTo(int v)const { return marked[v]; }
std::stack<int> pathTo(int v)const;
private:
void dfs(const Digraph& G, int v);
};
// constructor
DepthFirstDirectedPaths::DepthFirstDirectedPaths(const Digraph& G, int s) {
start = s;
marked = new bool[G.getV()];
edgeTo = new int[G.getV()];
for (int i = 0; i < G.getV(); ++i) {
marked[i] = false;
edgeTo[i] = i;
}
dfs(G, s);
}
void DepthFirstDirectedPaths::df