用DFS来实现 findPath 的功能。
因为在深度优先搜索中,路径的边集已隐含在递归过程中,因此利用DFS设计是比较容易的。
bool Network::FindPath(int v, int w, int &length, int path[])
{//Find a path from v to w, return length and path in path[0:length]. Return false if there is no path.
//first vertex in path is always v
path[0] = v;
length = 0; //current path length
if (v == w) return true;
//initialize for recursive path finder
int n = Vertices();
InitializePos(); //iterator
int *reach = new int [n+1];
for (int i = 1; i<= n; i++)
reach[i] = 0;
//search for path
bool x = findPath(v, w, length, path, reach);
DeactivatePos();
delete [] reach;
return x;
}
bool Network::findPath(int v, int w, int &length, int path[], int reach[])
{// Actual path finder v != w.
// Performs a depth-first search for a path to w.
reach[v] = 1;
int u = Begin(v);
while (u) {
i