Здравствуйте, PaulMinelly, Вы писали:
PM>Как написать такой алгоритм?
Ключевые слова: "рекурсия" или "дерево перебора"...
На С++, в данном случае, будет как-то так выглядеть:
bool find_solution( field_t& f, deque<move_t>& solution )
{
vector<move_t> candidates;
find_correct_moves( f, candidates );
for( vector<move_t>::size_type i = 0; i < candidates.size(); i++ ) {
const move_t& current = candidates[i];
field.do_move( current );
bool res = find_solution( field, solution );
field.undo_move( current );
if( !res )
continue;
solution.push_front( current );
return true;
}
return false;
}
deque<move_t> find_solutuon()
{
deque<move_t> result;
field_t start_position;
bool res = find_solution( start_position, result );
assert( res && start_position == field_t() );
return result;
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском