Nick McCaffery Ответов: 2

Как мне решить это скользящее задание головоломки в C++


Мне было поручено выполнить это скользящее задание головоломки, но я не уверен, с чего действительно начать. Правила присвоения следующие:


Каждая 8-головоломка имеет плитки с надписью 1-8 и одно пустое пространство, обозначенное 0.
Приведенные команды указывают, где вы должны попытаться переместить пустое пространство относительно его текущего положения.
Единственные ходы, которые вам разрешено делать, - это замена пустого пространства соседней плиткой.
Если вас попросят сделать невозможную замену (т. е. переместить пустую плитку за пределы сетки), не завершайте программу, просто проигнорируйте эту команду.
назначение
Для этого задания мы просим вас взять 8-ю головоломку и следовать последовательности команд движения вверх, вниз, влево и вправо. В конце последовательности вы должны проверить, была ли головоломка решена.

Ввод
В качестве входных данных вам будет дано некоторое начальное состояние доски в виде последовательности чисел, где 0 соответствует "пустой" плитке. Приведенный ниже пример будет представлять собой форму приведенного выше примера "начального состояния". После этого будет последовательность команд "вверх", "вниз", "влево" и "вправо", представленных символами на одной строке, разделенной пробелами. (Приведенная ниже последовательность команд не имеет никакого отношения к графическому изображению примера)

Пример ввода:
1 8 2 0 4 3 7 6 5
Д Р Р Р У Л

ваша задача
После сохранения начального состояния платы вы будете выполнять данные команды (до тех пор, пока они разрешены, как указано в разделе правил). Выполните все команды, а затем проверьте, правильно ли решена головоломка.

Выход
Ваш выход должен быть решением хорош! если головоломка находится в решенном порядке, как указано выше, и неправильное решение! если головоломка не находится в "целевом состоянии", указанном выше.

Что я уже пробовал:

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

Richard MacCutchan

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

2 Ответов

Рейтинг:
7

Patrice T

Цитата:
Если кто-то может предложить и посоветовать мне, с чего начать или как решить эту программу, дайте мне знать.

Просто играйте в головоломку: вырежьте маленькие квадраты бумаги, напишите на них цифры и играйте в головоломку вручную. Нарисуйте сетку, пронумеруйте строки и столбцы. Обратите внимание на то, когда ход является законным или нет, что происходит с числами, когда ход сделан.
Простое наблюдение за тем, что происходит, когда вы играете в головоломку, - это ваш алгоритм.
Цитата:
Я не очень старался с этой программой, так как был озадачен тем, с чего именно начать.

Ваша программа будет примерно выглядеть так:
// Read initial puzzle

// read moves

// play puzzle

// give result


Stefan_Lang

Я думаю, что это первый раз, когда я вижу совет решить вопрос программирования, вырезая бумажные плитки :-D

Рейтинг:
17

OriginalGriff

Начните с того, что внимательно прочтите вопрос - он подробно расскажет вам, что нужно делать.
Разбейте вопрос на несколько этапов:
1) читать ваши ответы.
2) Магазин входных.
4) Найдите исходное положение.
3) петля
3.1) прочитайте команду. Проверьте, что это действительно - вверх, вниз, влево, вправо только - если это так, сделайте это. Если это не так, сделайте с ним что - нибудь разумное-сообщите о проблеме, игнорируйте ее, что бы вы ни думали лучше всего. только не разбейте свое приложение!
3.2) проверьте наличие дополнительных команд и цикла, если таковые имеются.
4) Проверьте, решена ли головоломка, и если да, то скажите об этом и выходите

Затем выполняйте каждый шаг один за другим - тщательно проверяйте, прежде чем переходить к следующему.