Запуск алгоритма поиска в глубь
Итак, все реализовано, включая необходимые проверки, так что мы готовы за¬пустить проверку поиска маршрута перелета из Монреаля в Сиэтл. Если вернуться к рис. 4.2, то можно заметить, что существуют два пути: Монреаль-Лос-Анджелес-Сиэтл и Монреаль-Торонто-Сиэтл. Однако запуск алгоритма выдает следующий, довольно странный результат (мы не рассматривали отображение результата, но сделать это не так уж и сложно, достаточно перебрать в цикле for массив foundRoute).
• Montreal.
• New York.
• Houston. ~~
• Miami.
• Toronto.
• Seattle.
Рассмотрев результат, вы могли бы решить, что алгоритм не работает, поскольку предложенный маршрут включает все города, за исключением Лос-Анджелеса. Если бы туристический агент предложил вам такой маршрут перелета, то вы, вероятно, послали бы его еще дальше.
На самом деле алгоритм сработал нормально, просто функция CanContinueSearch () не имеет возможностей по оптимизации перелета. Сейчас алгоритм просто выполнил поиск в глубь, спустившись по дереву и возвратив результат. Давайте вернемся к стати¬ческому конструктору структуры Node.
Мы начали наш маршрут в Монреале, который имел следующие определения связей:
montreal.Connections = new Node[3]; montreal.Connections[0] = newyork;
montreal.Connections [1] = toronto; montreal.Connections [2] = losangeles;
Применение алгоритма поиска в глубь означает, что первым элементом массива де¬рева будет выбрана первая связь и нашим первым маршрутом полета окажется, таким образом, Нью-Йорк. Нью-Йорк имеет следующие связи:
newyork.Connections = new Node[3j; newyork.Connections [0] = montreal; newyork.Connections[1] = houston;
newyork.Connections [2] =miami;
Первая связь Нью-Йорка — это Монреаль, который уже есть в маршруте полета. Таким образом, вторым элементом массива окажется Хьюстон. Хьюстон имеет следую¬щие связи:
houston.Connections = new Node[3]; houston.Connections[0] = miami;
houston.Connections [1] = Seattle; houston.Connections [2] = newyork;
Таким образом, следующим пунктом после Хьюстона окажется Майами, имеющий такие связи:
miami.Connections = new Node[3]; miami.Connections[0] = toronto;
miami.Connections[1] = houston; miami.Connections[2] = newyork;
Из Майами мы направляемся в Торонто, который имеет следующие связи:
toronto.Connections = new Node[3J; toronto.Connections [0] = miami; toronto.Connections[1] = Seattle;
toronto.Connections [2] = montreal;
Первая связь Торонто — это Майами, где мы уже были, а вторая — Сиэтл, куда нам в нужно попасть в конце концов.
С точки зрения алгоритма, все сработало. Но с точки зрения путешественника, :аршрут не идеален. Это в очередной раз демонстрирует важность написания проверок г.тткций. Алгоритмы могли бы быть правильными, но создаваемый им результат — нет. "т\-чшение данного примера — одно из упражнений в конце главы.