有向图中,我们可以使用深度优先遍历方式来测试有向图的可达性。这样给出一个节点,我们就可以知道是否存在一个路径从起点(就是从该点进行深度优先遍历)到达该节点。它解决了单点连通性的问题,使用用例可以判定其他顶点和给定的起点是否连通。
在存储图的数据结构中,我们使用邻接表来存储有向图。下图就是一个存储的示例:
源代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Digraph
{
public:
Digraph(size_t nvertax) : arr(nvertax), vertaxs(nvertax), edges(0) {}
void addEdge(size_t a, size_t b);
void removeEdge(size_t a, size_t b);
void addVertax(size_t v);
void removeVertax(size_t v);
Digraph reverse() const;
vector<size_t> adj(size_t v) const;
void showAdj(size_t v) const;
void showDigraph() const;
size_t edge() const { return edges; }
size_t vertax() const { return vertaxs; }
size_t arrSize() const { return ar