Как реализовать поиск в глубину или DFS для графика в Java?

Kak Realizovat Poisk V Glubinu Ili Dfs Dla Grafika V Java



Поиск в глубину (DFS) — это алгоритм поиска обхода графа, который начинает исследовать каждую ветвь от корневого узла, а затем перемещается как можно глубже, чтобы пройти по каждой ветви графа перед возвратом. Этот поиск прост в реализации и потребляет меньше памяти по сравнению с другими алгоритмами обхода. Он посещает все узлы в подключенном компоненте и помогает проверить путь между двумя узлами. DFS также может выполнять топологическую сортировку для таких графов, как направленный ациклический граф (DAG).

В этой статье демонстрируется процедура реализации DFS для предоставленного дерева или графа.

Как реализовать поиск в глубину или DFS для графика в Java?

DFS в основном используется для поиска графа, посещая каждую ветвь/вершину ровно один раз. Он может обнаруживать или идентифицировать циклы на графике, что помогает предотвратить взаимоблокировки. Его можно использовать для решения головоломок или проблем с лабиринтом. DFS может быть реализована/использована в алгоритмах графов, веб-сканировании и проектировании компиляторов.







Для объяснения посетите приведенный ниже код поиска в глубину или DFS:



сорт График {
частный Связанный список добавить узел [ ] ;
частный логический Пройдено [ ] ;

График ( инт вершины ) {
добавить узел '=' новый Связанный список [ вершины ] ;
Пройдено '=' новый логический [ вершины ] ;

для ( инт я '=' 0 ; я < вершины ; я ++ )
добавить узел [ я ] '=' новый Связанный список ( ) ;
}
пустота addEdge ( инт источник, инт начинать ) {
добавить узел [ источник ] . добавлять ( начинать ) ;
}

Описание приведенного выше кода:



  • Во-первых, класс с именем « График ' создано. Внутри него объявляется « Связанный список 'по имени' добавить узел [] ' и массив логического типа с именем ' Пройдено[] ».
  • Далее передаем вершины конструктору « График ” в качестве параметра.
  • После этого « для » создается цикл для перемещения по каждому узлу выбранной ветки.
  • В конце концов, тип void « добавитькрай() ” используется для добавления ребер между вершинами. Эта функция принимает два параметра: источник вершины « источник ' и конечная вершина ' начинать ».

После создания графа теперь добавим код поиска в глубину или DFS для созданного выше графа:





пустота ДФС ( инт вершина ) {
Пройдено [ вершина ] '=' истинный ;
Система . вне . Распечатать ( вершина + ' ' ) ;
Итератор этот '=' добавить узел [ вершина ] . списокитератор ( ) ;
пока ( этот. hasNext ( ) ) {
инт прил. '=' этот. следующий ( ) ;
если ( ! Пройдено [ прил. ] )
ДФС ( прил. ) ;
}
}

В приведенном выше блоке кода:

  • Во-первых, « ДФС() ” создается функция, которая получает “ вершина ” в качестве параметра. Эта вершина помечается как посещенная.
  • Затем напечатайте посещенную вершину, используя « выход.печать() метод.
  • Затем создайте экземпляр « Итератор », который выполняет итерацию по соседним вершинам текущей вершины.
  • Если вершина не посещена, то она передает эту вершину « ДФС() функция.

Теперь давайте создадим « основной() », чтобы создать график, а затем применить к нему DFS:



публичный статический пустота основной ( Нить аргументы [ ] ) {
График к '=' новый График ( 4 ) ;
к. addEdge ( 0 , 1 ) ;
к. addEdge ( 1 , 2 ) ;
к. addEdge ( 2 , 3 ) ;
к. addEdge ( 3 , 3 ) ;
Система . вне . печать ( «Следующее — обход в глубину» ) ;
к. ДФС ( 1 ) ;
}
}

Объяснение приведенного выше кода:

  • Сначала создайте объект « к ' для ' График() метод.
  • Далее « добавитькрай() ” используется для добавления ребер между несколькими вершинами. Это создает структуру нашего графика.
  • В конце передайте любое значение вершины в качестве аргумента уже созданному « ДФС() функция. Чтобы найти этот путь вершины от корня, используйте алгоритм поиска в глубину. Например, значение « 1 » передается в « ДФС() функция.

После окончания этапа компиляции:

Вывод показывает, что поиск в глубину реализован успешно.

Заключение

Поиск в глубину — это алгоритм обхода графа, который формирует основу для многих алгоритмов графа, таких как поиск кратчайшего пути, связующие деревья и анализ связности. Он начинается с корневого узла, а затем перемещается как можно глубже до узла выхода или последнего узла этой ветви перед возвратом. В этой статье продемонстрирована процедура реализации поиска в глубину или DFS для графа в Java.