假设您必须使用dfs(深度优先搜索)实现Graph
类,其中包含一些算法。例如,它可能是连接检查和Graph
类看起来像:递归函数使用的全局变量
class Graph {
void dfsConnected(int v) {
visited[v] = true;
//indexing over v's adjacencies and calling dfsConnected recursively
}
bool isConnected {
//indexing over vertice list and calling dfsConnected
}
}
假设我们有一大堆的算法,使用这个类DFS(他们每个人的使用特定的DFS)。 问题是visited
数组:
- ,我们可以把它定义为一个私有字段为每个DFS像
visitedConnectivity
,visitedTopSorting
,visitedBridges
等,所以我们有很多的Graph
的每个实例私有变量。如果我们每个dfs有3-4个这样的“全局”变量呢? - 我们可以通过
visited
作为dfs
的论点。在这种情况下,我们将在每次dfs调用时都有开销。
那么,这个问题最简单和真实世界使用的解决方案是什么?当然,它不仅与图算法有关,但我发现用dfs术语解释它更容易。
为什么你说没有开销?如果visited是一个'vector',它将被复制 - 如果它是一个数组,这不会解决问题,因为它只能通过引用传递。你能解释一下你的逻辑吗? – amit 2011-12-25 21:16:27
我正在考虑通过引用NCE。为什么这不能解决问题? – Nicolas78 2011-12-25 21:18:21
有。在每次调用时,一个指向'visited'的指针将被存储在调用堆栈中。 – karlicoss 2011-12-25 21:18:24