Это по существу путь к поиску.
Предположим, что IsConnected (а, б) возвращает, если два узла соединены
(я пишу код в Lua, это не должно быть трудно перевести)
function search(list)
local i = 0
while i < 10000 do
i = i + 1
if isConnected(i,list[#list]) then
--This expression refers to the last member
search(list ++ i)
--Although not technically a proper operator, ++ adds the element to the end of the list
end
end
submit_list(list)
end
submit_list
является функция, которая берет списки и проверяет их. Он находит самый длинный представленный список, который не содержит дубликатов. Этот список будет решением вашей проблемы.
О, еще одна вещь; мой код ничего не учитывает. Если список содержит дубликаты узлов, эта функция должна завершиться так, чтобы она не возвращалась навсегда.