На этом уроке мы напишем алгоритм поиска вширь. Однако, запустить его не удастся. Почему? Это вам самостоятельное задание, разобраться в причине, и найти способ, как это исправить.
Дата отправки отчёта:
8 февраля 2018 г.
Задание выполнено: за
1 час. 5 мин.
Чему научился:
Написал функцию поиска в ширь. Проблема возникает как я понял потому, что во время прохода по колекции ее значения изменяются и это выдает исключения. Как вариант исправления можно вместо Hashtable использовать Dictionary и тогда в цикле foreach добавить преобразование .ToArray(). После этого программа работает. Для того чтобы исправить ситуацию с Hashtable я нашел выход в том, что все индексы можно перевести в массив методом CopyTo(array, from). Так как в методе GetAllVertex нас интересуют только индексы всех вершин, то как бы не изменялись цвета, обновлять полученный массив не будет нужды. В итоге было дописано следующее:
Array arr = new int[vertexes.Keys.Count]; vertexes.Keys.CopyTo(arr, 0); foreach (int number in arr) { yield return number; }
Что было сложным:
Не очень было понятно как лучше исправить ситуацию с Hashtable
Трудности: Понять в чем именно ошибка. Программу то я запустил, перейдя с foreach на for, но чем точно дело я не понял. Похоже Hashtable возвращает не int в итераторе. Но урок отличный, я долго колупался)
Научился: Вспомнил алгоритм поиска вширь через очередь. Ну раз мы изменяли коллекцию, то почему бы там, где итератор, не сделать пребор, как в массиве - по индексу?