Предположим, вам нужно реализовать класс 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).Проблема в visited
массиве:
- мы могли бы определить его как личное поле для каждого dfs вроде
visitedConnectivity
, visitedTopSorting
, visitedBridges
и т. Д. Так что у нас будет многочастные переменные в каждом экземпляре Graph
.А что если у нас есть 3-4 таких «глобальных» переменных для каждого dfs? - , мы можем передать
visited
в качестве аргумента dfs
.В этом случае у нас будут накладные расходы при каждом вызове dfs.
Итак, каково самое простое и реально используемое решение этой проблемы?Конечно, это связано не только с алгоритмами графов, но мне было проще объяснить это в терминах DFS.