From 08b37fe0e13b5fee77b3d4c10eb7a3eb62205f5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D1=8B=D1=82=D0=BA=D0=BE=D0=B2=20=D0=A0=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Sun, 27 Jul 2025 22:07:09 +0300 Subject: [PATCH] =?UTF-8?q?[=D0=93=D0=BB=D0=B0=D0=B2=D0=B0=205]=20=D0=9F?= =?UTF-8?q?=D0=BE=D0=B8=D1=81=D0=BA=20=D0=B2=20=D1=88=D0=B8=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Chapter5_BreadthFirstSearch/Bfs.cs | 23 +++++++++++ .../Chapter5_BreadthFirstSearch.csproj | 10 +++++ Chapter5_BreadthFirstSearch/Program.cs | 28 +++++++++++++ Chapter5_BreadthFirstSearch/TreeNode.cs | 18 +++++++++ GrokAlgorithms.sln | 40 ++++++++----------- 5 files changed, 96 insertions(+), 23 deletions(-) create mode 100644 Chapter5_BreadthFirstSearch/Bfs.cs create mode 100644 Chapter5_BreadthFirstSearch/Chapter5_BreadthFirstSearch.csproj create mode 100644 Chapter5_BreadthFirstSearch/Program.cs create mode 100644 Chapter5_BreadthFirstSearch/TreeNode.cs diff --git a/Chapter5_BreadthFirstSearch/Bfs.cs b/Chapter5_BreadthFirstSearch/Bfs.cs new file mode 100644 index 0000000..d02c53c --- /dev/null +++ b/Chapter5_BreadthFirstSearch/Bfs.cs @@ -0,0 +1,23 @@ +using GrokAlgorithms.Chapter5_BreadthFirstSearch; + +static class Bfs +{ + public static TreeNode? Search(TreeNode root, Func condition) + { + Queue> queue = new(); + queue.Enqueue(root); + HashSet> visited = []; + while (queue.Count > 0) + { + var curr = queue.Dequeue(); + if (visited.Contains(curr)) + continue; + if (condition(curr.Value)) + return curr; + foreach (var child in curr.Children) + queue.Enqueue(child); + visited.Add(curr); + } + return null; + } +} \ No newline at end of file diff --git a/Chapter5_BreadthFirstSearch/Chapter5_BreadthFirstSearch.csproj b/Chapter5_BreadthFirstSearch/Chapter5_BreadthFirstSearch.csproj new file mode 100644 index 0000000..206b89a --- /dev/null +++ b/Chapter5_BreadthFirstSearch/Chapter5_BreadthFirstSearch.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/Chapter5_BreadthFirstSearch/Program.cs b/Chapter5_BreadthFirstSearch/Program.cs new file mode 100644 index 0000000..667ee4b --- /dev/null +++ b/Chapter5_BreadthFirstSearch/Program.cs @@ -0,0 +1,28 @@ +using GrokAlgorithms.Chapter5_BreadthFirstSearch; + +int count = 0; + +// Команда для построения дерева +TreeNode BuildTreeCommand(int value, int depth, int branchingFactor) +{ + var node = new TreeNode(value) { Comment = $"{count++}" }; + if (depth == 0) return node; + + for (int i = 1; i <= branchingFactor; i++) + node.Children.Add(BuildTreeCommand(value + i * 10, depth - 1, branchingFactor)); + return node; +} + +// Команда для печати дерева +void PrintTreeCommand(TreeNode node, string indent = "") +{ + Console.WriteLine($"{indent}{node.Value} [{node.Comment}] {(node.Selected ? " Selected" : "")}"); + foreach (var child in node.Children) + PrintTreeCommand(child, indent + " "); +} + +var root = BuildTreeCommand(1, 3, 2); +var found = Bfs.Search(root, (num) => num > 25); +if (found != null) + found.Selected = true; +PrintTreeCommand(root); diff --git a/Chapter5_BreadthFirstSearch/TreeNode.cs b/Chapter5_BreadthFirstSearch/TreeNode.cs new file mode 100644 index 0000000..e47adf7 --- /dev/null +++ b/Chapter5_BreadthFirstSearch/TreeNode.cs @@ -0,0 +1,18 @@ +namespace GrokAlgorithms.Chapter5_BreadthFirstSearch; + + +public class TreeNode +{ + public T Value { get; init; } + public string Comment { get; init; } + public List> Children { get; init; } + public bool Selected { get; set; } + + public TreeNode(T value) + { + Value = value; + Comment = ""; + Children = new List>(); + Selected = false; + } +} \ No newline at end of file diff --git a/GrokAlgorithms.sln b/GrokAlgorithms.sln index 7b69c3f..b09cb54 100644 --- a/GrokAlgorithms.sln +++ b/GrokAlgorithms.sln @@ -1,30 +1,24 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 +Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Chapter4_QuickSort", "Chapter4_QuickSort\Chapter4_QuickSort.csproj", "{4088F633-80E4-44DF-9DE4-996A4B3E3088}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Chapter5_BreadthFirstSearch", "Chapter5_BreadthFirstSearch\Chapter5_BreadthFirstSearch.csproj", "{F54FC00B-FB3D-4A8B-ABA8-33A43FC74DE4}" +EndProject Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7F895D96-6E79-40BC-A778-89E76BC981F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F895D96-6E79-40BC-A778-89E76BC981F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F895D96-6E79-40BC-A778-89E76BC981F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F895D96-6E79-40BC-A778-89E76BC981F6}.Release|Any CPU.Build.0 = Release|Any CPU - {C4C54C0A-59E1-4C40-B2C2-D8C800603AF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4C54C0A-59E1-4C40-B2C2-D8C800603AF6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4C54C0A-59E1-4C40-B2C2-D8C800603AF6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4C54C0A-59E1-4C40-B2C2-D8C800603AF6}.Release|Any CPU.Build.0 = Release|Any CPU - {4088F633-80E4-44DF-9DE4-996A4B3E3088}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4088F633-80E4-44DF-9DE4-996A4B3E3088}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4088F633-80E4-44DF-9DE4-996A4B3E3088}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4088F633-80E4-44DF-9DE4-996A4B3E3088}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4088F633-80E4-44DF-9DE4-996A4B3E3088}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4088F633-80E4-44DF-9DE4-996A4B3E3088}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4088F633-80E4-44DF-9DE4-996A4B3E3088}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4088F633-80E4-44DF-9DE4-996A4B3E3088}.Release|Any CPU.Build.0 = Release|Any CPU + {F54FC00B-FB3D-4A8B-ABA8-33A43FC74DE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F54FC00B-FB3D-4A8B-ABA8-33A43FC74DE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F54FC00B-FB3D-4A8B-ABA8-33A43FC74DE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F54FC00B-FB3D-4A8B-ABA8-33A43FC74DE4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection EndGlobal