Поиск в глубине (DFS) — это алгоритм для обхода или поиска структур данных дерева или графика. Он начинает с корня (выбирая некоторый произвольный узел в качестве корня в случае графа) и исследует как можно дальше вдоль каждой ветви, прежде чем вернуться назад.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DefthFirst { class Program { public class Employee { public Employee(string name) { this.name = name; } public string name { get; set; } public List<Employee> Employees { get { return EmployeesList; } } public void isEmployeeOf(Employee e) { EmployeesList.Add(e); } List<Employee> EmployeesList = new List<Employee>(); public override string ToString() { return name; } } public class DepthFirstAlgorithm { public Employee BuildEmployeeGraph() { Employee Eva = new Employee("Eva"); Employee Sophia = new Employee("Sophia"); Employee Brian = new Employee("Brian"); Eva.isEmployeeOf(Sophia); Eva.isEmployeeOf(Brian); Employee Lisa = new Employee("Lisa"); Employee Tina = new Employee("Tina"); Employee John = new Employee("John"); Employee Mike = new Employee("Mike"); Sophia.isEmployeeOf(Lisa); Sophia.isEmployeeOf(John); Brian.isEmployeeOf(Tina); Brian.isEmployeeOf(Mike); return Eva; } public Employee Search(Employee root, string nameToSearchFor) { if (nameToSearchFor == root.name) return root; Employee personFound = null; for (int i = 0; i < root.Employees.Count; i++) { personFound = Search(root.Employees[i], nameToSearchFor); if (personFound != null) break; } return personFound; } public void Traverse(Employee root) { Console.WriteLine(root.name); for (int i = 0; i < root.Employees.Count; i++) { Traverse(root.Employees[i]); } } } static void Main(string[] args) { DepthFirstAlgorithm b = new DepthFirstAlgorithm(); Employee root = b.BuildEmployeeGraph(); Console.WriteLine("Пересечения графа\n------"); b.Traverse(root); Console.WriteLine("\nПоиск в графе\n------"); Employee e = b.Search(root, "Eva"); Console.WriteLine(e == null ? "Сотрудник, не найден" : e.name); e = b.Search(root, "Brian"); Console.WriteLine(e == null ? "Сотрудник, не найден" : e.name); e = b.Search(root, "Soni"); Console.WriteLine(e == null ? "Сотрудник, не найден" : e.name); Console.ReadKey(); } } } |
Вывод:
Пересечения графа
Eva
Sophia
Lisa
John
Brian
Tina
Mike
Поиск в графе
Eva
Brian
Сотрудник, не найден