Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2010, 21:36   #1
xaero93
Пользователь
 
Регистрация: 27.02.2009
Сообщений: 53
По умолчанию Путь коня.

Здравствуйте уважаемые.

Такую задачку задали:

Путь коня

На обычной шахматной доске стоит конь. Ему требуется перебраться на другую клетку, сделав ровно k ходов. Требуется написать программу, которая определяет, может ли конь это сделать, если да, то сколькими возможными способами, и выводит один из таких способов.

Не знаю с чего начать вообще. Может кто нить направит в нужную сторону.

В файл вводится начальная позиция и кол-во ходов через пробел.
З.Ы. Сильно не бейте за некрасивый код, мне всего лишь 15 лет
xaero93 вне форума Ответить с цитированием
Старый 27.11.2010, 22:50   #2
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Какие ограничения? Если надо "количество способов", то проще всего динамикой, запускаем цикл до нужного числа, и на каждой итерации пересчитываем значения (если для определенной клетки ответ больше ноля, то увеличиваем на это число ответы для всех клеток, куда можно попасть с этой), база динамики - единица для начальной клетки.
LeBron вне форума Ответить с цитированием
Старый 27.11.2010, 23:12   #3
sergey.d
Пользователь
 
Регистрация: 23.08.2010
Сообщений: 98
По умолчанию

Быстренько набросал программку, которая считает количество путей из (sr,sc) в (tr,tc) длиной stepCount на доске размером BoardSize. Результат сохраняется в pathCount. Вывод одного из путей -- попробуй самостоятельно

Код:
#include <iostream>
const int BoardSize = 8;

void horseStep(int sr, int sc, int tr, int tc, int stepCount, int &pathCount)
{
    if(sr < 0 || sr >= BoardSize || sc < 0 || sc >= BoardSize || stepCount < 0) return;
    if(sr == tr && sc == tc && stepCount == 0) { pathCount++; return; }
    horseStep(sr+2, sc-1, tr, tc, stepCount - 1, pathCount);
    horseStep(sr+2, sc+1, tr, tc, stepCount - 1, pathCount);
    horseStep(sr-2, sc-1, tr, tc, stepCount - 1, pathCount);
    horseStep(sr-2, sc+1, tr, tc, stepCount - 1, pathCount);
    horseStep(sr+1, sc+2, tr, tc, stepCount - 1, pathCount);
    horseStep(sr-1, sc+2, tr, tc, stepCount - 1, pathCount);
    horseStep(sr+1, sc-2, tr, tc, stepCount - 1, pathCount);
    horseStep(sr-1, sc-2, tr, tc, stepCount - 1, pathCount);
}

int main(int, char *[])
{
    int pathCount = 0;
    // horse jumps from (0,0) to (5,2) by 3 steps
    horseStep(0, 0, 5, 2, 3, pathCount);
    std::cout << "Exists " << pathCount << " paths" << std::endl;
    return 0;
}
Для примера ищется количество путей из (0,0) в (5,2) за три шага.

Последний раз редактировалось sergey.d; 27.11.2010 в 23:15.
sergey.d вне форума Ответить с цитированием
Старый 28.11.2010, 09:09   #4
xaero93
Пользователь
 
Регистрация: 27.02.2009
Сообщений: 53
По умолчанию

Большое спасибо. С записями ходов я разберусь сам.,))
Если я правильно понял то это си (Я сам на делфи пишу)
З.Ы. Сильно не бейте за некрасивый код, мне всего лишь 15 лет
xaero93 вне форума Ответить с цитированием
Старый 28.11.2010, 10:03   #5
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от sergey.d Посмотреть сообщение
Быстренько набросал программку, которая считает количество путей из (sr,sc) в (tr,tc) длиной stepCount на доске размером BoardSize. Результат сохраняется в pathCount. Вывод одного из путей -- попробуй самостоятельно


Для примера ищется количество путей из (0,0) в (5,2) за три шага.
Да, я ступил, что классическая доска настолько маленькая, что можно писать полнейший перебор)))

Действительно, так даже проще немного. Тогда можно сократить код - не прописывать все 8 вариантов хода, а воспользоваться тем, что модуль произведения разностей координат между начальной и конечной точкой для хода коня равен двум - о перебирать все координаты двумя (или даже одним) циклами с условием.
LeBron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Путь к файлу. Sniperok Общие вопросы по Java, Java SE, Kotlin 2 12.08.2010 04:46
на шахматной доске заданы 2 клетки соедините эти 2 клетки кратчайшим путем коня Ker_33rus Общие вопросы C/C++ 5 18.03.2010 12:25
Две проги. Порезка труб и движения коня по шахматной доске. По какому принципу работают такие проги? sadf Общие вопросы C/C++ 4 06.03.2010 20:04
Путь к БД stscolt БД в Delphi 4 11.02.2010 17:15
Путь StartMis Общие вопросы Delphi 3 03.10.2008 14:45