На этом уроке мы познакомимся с алгоритмом поиска вглубь. Мы проработаем весь алгоритм на конкретном примере. Самостоятельное задание - выбрать граф и также с ним поработать.
Дата отправки отчёта:
29 июля 2019 г.
Задание выполнено: за
2 дня 20 час. 39 мин.
Чему научился:
в общем я в принципе сам и сделал уже метод Особо строго не судите:
// Поиск в глубину запускаем рекурсию public Queue<int> SearchPachDepth() { // останавливается !!!? graf.SetColorAll(Graf.EnumColor.White);
if (stackPassed.Count != 0) { stackPassed.Clear(); }
// если элемент _StartInt Белый значит делаем его Красный цвет или пропускаем AddRedtoStack(0);
// Рекурсия return SearchPachDepth(0); }
// Поиск в глубину public Queue<int> SearchPachDepth(int _StartInt) { // если элемент _StartInt Красный делаем его Черным и удаляем и возвращаем _StartInt = RemoveBlackFromStack(_StartInt);
// Собственная очередь прохода по вершинам queuePassed.Enqueue(_StartInt);
foreach (int NestedVertex in graf.TempEdge.ReturnAllEdgeL(_StartInt)) { AddRedtoStack(NestedVertex); }
if (stackPassed.Count == 0) { // Выход из рекурсии } else { // Запускаем рекурсию SearchPachDepth(stackPassed.Peek()); }
void AddRedtoStack(int _int) { if (graf.GetColorVertex(_int).Equals(Graf.EnumColor.White)) { // окрашиваем в Red graf.SetColor(_int, Graf.EnumColor.Red);
// добавляем в стэк stackPassed.Push(_int); } }
int RemoveBlackFromStack(int _int) { if (graf.GetColorVertex(_int).Equals(Graf.EnumColor.Red)) { // Окрашиваем в черный graf.SetColor(_int, Graf.EnumColor.Black);
//Удаляем элемент из стека _int = stackPassed.Pop(); }
Научился: алгоритму поиска вглубь Трудности: Не запутаться в очередности прохождения стека Каждое состояние стека рисовать не стал, но алгоритм я усвоил. До этого разбирался уже с этими алгоритмами, но в большей степени просто копировал код, и использовал его. А теперь я увидел как действительно он работает.