На этом уроке мы напишем алгоритм поиска вширь. Однако, запустить его не удастся. Почему? Это вам самостоятельное задание, разобраться в причине, и найти способ, как это исправить.
Дата отправки отчёта:
6 ноября 2016 г.
Задание выполнено: за
1 час. 00 мин.
Чему научился:
Реализации алгоритма поиска вширь на уровне кода, поиску причин возникновения Exception-a "Collection was modified; enumeration operation may not execute".
Что было сложным:
Особых сложностей не было . Понадобилось время для пошаговой проверки алгоритма.
Комментарии:
Урок понравился тем, что пришлось разбираться в причинах возникшей ошибки. Выяснил, что при исп-ии foreach (int nr in ВсеВершины()) в методе УстановитьЦвет(Цвет цвет), Hashtable вершины вернул при 1м проходе номер 12й вершины, т.е. эл-ты расположились в обратном порядке (по убыванию). Заменив строку foreach (int nr in ВсеВершины()) на for (int nr = 0; nr < вершины.Count; nr++) алгоритм последовательно прошёл все вершины (от 0 до 12й) и уже без exception-a. Второй момент, в классе ПоискВШирь исправил строку граф.УстановитьЦвет(Граф.Цвет.чёрный) на граф.УстановитьЦвет(a, Граф.Цвет.чёрный) - иначе все вершины графа будут окрашиваться чёрным при извлечении 1го эл-та из очереди. Если не прав - жду ваших замечаний .
Трудности: Понять в чем именно ошибка. Программу то я запустил, перейдя с foreach на for, но чем точно дело я не понял. Похоже Hashtable возвращает не int в итераторе. Но урок отличный, я долго колупался)
Научился: Вспомнил алгоритм поиска вширь через очередь. Ну раз мы изменяли коллекцию, то почему бы там, где итератор, не сделать пребор, как в массиве - по индексу?