На этом уроке мы напишем алгоритм поиска вширь. Однако, запустить его не удастся. Почему? Это вам самостоятельное задание, разобраться в причине, и найти способ, как это исправить.
Дата отправки отчёта:
16 ноября 2018 г.
Задание выполнено: за
1 день 18 час. 49 мин.
Чему научился:
Продолжаю учиться работать с коллекциями. Осознал реализацию поиска в ширину в графе на C#.
Что было сложным:
Не знаю насколько правильно я мыслю, исправил ошибку в одном месте. При поиске в ширину в графе мы ведь окрашиваем одну вершину в черный цвет, потом окрашиваем смежные ей в красный. В видео уроке был метод окрашивания всех вершин в черный: граф.УстановитьЦвет(Граф.Цвет.черный);. Решил, что правильнее будет окрашивать текущую вершину граф.УстановитьЦвет(a, Граф.Цвет.черный);, а потом уже с ней работать перебирая смежные с ней и окрашивая в красный. (кстати в обоих случаях происходит перегрузка метода, а также в первом случае вызывается не тот метод с одним параметром). Также было домашним заданием исправить ошибку по которой не компилируется программа. Проблема была в том, что нельзя изменять коллекцию, по которой идешь foreach. Погуглил эту тему. Сделал следующее, может конечно чушь написал.... Привел коллекцию Хэштейбл к массиву (ToArray). Ну то есть получается сначала через foreach получил коллекцию в массив, а после поработал с ней окрашивая все ее вершины. На скриншотах видно, что сделал. В следующем уроке увижу как надо было сделать правильно =)
Трудности: Понять в чем именно ошибка. Программу то я запустил, перейдя с foreach на for, но чем точно дело я не понял. Похоже Hashtable возвращает не int в итераторе. Но урок отличный, я долго колупался)
Научился: Вспомнил алгоритм поиска вширь через очередь. Ну раз мы изменяли коллекцию, то почему бы там, где итератор, не сделать пребор, как в массиве - по индексу?