Graph
クラスを実装する必要があり、いくつかのアルゴリズムが含まれていて、dfs(深さ優先探索)を使用しているとします。例えば、それは接続性チェックであるかもしれないと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を使用して、我々はアルゴリズムの束を持っていると仮定します。などvisitedConnectivity
、visitedTopSorting
、visitedBridges
、のようなすべてのDFSは、だから我々はGraph
のすべてのインスタンスにプライベート変数の多くを持つことになりますため、我々はプライベートフィールドとして、それを定義することができ
- : 問題が
visited
配列です。そして、すべてのdfsに対してこのような「グローバル」変数が3-4ある場合はどうなりますか? - を
dfs
の引数として渡すことができます。この場合、すべてのdfs呼び出しにオーバーヘッドが発生します。
この問題の最も簡単で現実的な解決策は何ですか?もちろん、それはグラフアルゴリズムだけでなく、dfsという言葉で簡単に説明することができます。
なぜオーバーヘッドはないのですか?訪問先が 'ベクトル'ならば、オーバーヘッドがある場合は配列ですが、これは参照渡しのため問題は解決しません。この回答のロジックを説明できますか? – amit
私はrefereを渡すと思っていますnce。なぜそれが問題を解決しないのですか? – Nicolas78
あります。呼び出しごとに 'visited'へのポインタが呼び出しスタックに格納されます。 – karlicoss