Re[4]: Детская головоломка - как решить?
От: Erop Россия  
Дата: 28.05.08 05:07
Оценка: -1
Здравствуйте, 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;
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.