В этой статье демонстрируется процедура реализации 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.