прикольно. про первоначальный вопрос все забыли. а что конкретно, Понтий, не понятно? или вообще все? раз решение многоэтапное, на каждом из этапов решение ветвится, то и получается дерево решений. короче, решение рекурсивно. я недолюбливаю программную рекурсию в виде Код (Text): int f(int x){ ... return f(...); } поэтому и говорю про графы. чтобы понять рекурсию, нужно понять рекурсию (с)не моё. задавай более конкретные вопросы, постараюсь ответить.
Artemy Просто в плане реализации не пойму, как... Вот у меня такое девственное чувство, что задачу эту и нужно решать рекурсией, а по другому никак. Вот даже алгоритм нашел... Только он на Паскале. Код (Text): procedure Backtracking(k); begin for (y in A[k]) do if P(X[1],...,X[k-1],y) then begin X[k]:=y; if k=N then {X[1],...,X[N] -решение} Backtracking(k+1) end end; Как раз и называется "Перебор с отходом назад". Только вот как его прикрутить к этой задаче, я пока не допер...