Поиск в глубине (DFS) — это алгоритм для обхода или поиска структур данных дерева или графика. Он начинает с корня (выбирая некоторый произвольный узел в качестве корня в случае графа) и исследует как можно дальше вдоль каждой ветви, прежде чем вернуться назад.
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
Сотрудник, не найден