假設您必須使用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