Задача определения путей в графах
Решение целого ряда практических задач, описываемых в терминах графов, зависит от существования некоторой цепи, соединяющей данную вершину с какой-либо другой. Например, в качестве вершин графа можно рассматривать исходные позиции или состояния некоторой головоломки или игры, а ребра будут указывать возможные ходы из одной позиции в другую. Ребро будет неориентированным или ориентированным в зависимости от того, обратим переход или нет.
Граф G(X) с двумя отмеченными вершинами xi, xj называется (xi, xj) – плоским, если граф G¢(X)=G(X)È(xi, xj), полученный добавлением к G(X) ребра (xi, xj), является плоским.
Рассмотрим алгоритм определения пути, ведущего из вершины xi в xj плоского графа. Если xi не является вершиной никакого простого цикла, то при определении алгоритма пути из xi в xj в графе G(X) всегда выбирается самый левый или правый коридор (ребро) (рис. 3.33).
– путь при выборе левого коридора;
– путь при выборе правого коридора.
Аналогичный алгоритм определения пути в прадереве предполагает следующие действия. Из корня идти по какой-либо ветви насколько возможно далеко, затем возвратиться на какой-нибудь перекресток и отправиться по новому направлению (еще не пройденному) и т.д. Искомый путь из xi в xj будет состоять из всех тех ребер, которые в процессе поиска были пройдены по одному разу.
При определении пути в произвольном графе, не являющемся прадеревом, приходим к предыдущему случаю следующим образом. Если, пройдя по некоторому ребру g, попадаем на уже пройденный ранее перекресток х, то ребро g «отсекается» от одной из своих концевых точек. После отсечения ребра, пройденные хотя бы один раз, образуют прадерево.
Рис. 3.33. Определение пути в графе
При определении пути в графе с помощью алгоритма Тарри необходимо в данном алгоритме пользоваться правилом:
а) не проходить дважды по одному ребру в одном и том же направлении;
б) находясь в вершине х, не выбирать того ребра, которое привело в данную вершину в первый раз (если есть возможность другого выбора).