Какие из утверждений верны для приведенной реализация поиска в глубину?
dfs(graph *g, int v) // граф задан массивом вершин и номером вершины начала обхода
{
edgenode *p; (* temporary pointer *)
int y; (* successor vertex *)
if (finished) return; (* allow for search termination *)
discovered[v] = TRUE; // стартовая вершина помечается как обнаруженная
time = time + 1; // условно учитывается время ее обработки
entry_time[v] = time; // записывается время начала ее обработки
process vertex_early(v); // предобработка вершины
p = g->edges[v]; // извлекается первое инцидентное с ней ребро
while (p ! = NULL) { // пока инцидентные ребра есть
y = p->y; // вершина, которой ребро заканчивается
if (discovered[y] == FALSE) { // если она не была обнаружена
parent[y] = v; // записываем ее родителя
process edge(v,y); // обрабатываем ребро
dfs(g,y); // обходим в грубину граф начиная с этой вершины
}
else if ((!processed[y]) || (g->directed)) // если она была обнаружена и граф - ориентированный
process edge(v,y); // обрабатываем ребро
if (finished) return; // если обработали все - выходим
p = p->next; // переходим к следующему инцидентному ребру
}
process vertex_late(v); // постобработка вершины
time = time + 1; // добавляем время постобрабоки
exit time[v] = time; // записываем время выхода
processed[v] = TRUE; // помечаем вершину обработанной
}

  • Алгоритм завершится после обхода всех вершин и ребер графа даже без установки переменной finished
  • Алгоритм не завершится после обхода всех вершин и ребер без установки переменной finished
  • Она не рекурсивная
  • Она рекурсивная
  • Переменная finished служит для завершения вызова рекурсии для некоторых задач
  • Переменная finished служит для завершения цикла обхода ребер, смежных с текущей обрабатываемой вершиной

К сожалению, у нас пока нет статистики ответов на данный вопрос, но мы работаем над этим.