Ход конем на C++? Не знаю с чего начать писать программу "ход конем". Матрица 3на3, элементы пронумерованы от 1 до 9, в конце нужно указать по каким номерам ходил конь, . Сначала думал, что сумма i+j должна быть равна всегда при ходе 1->2->3->(6) и так со всеми вариациями. Потом думал, на четность и не четность. Складывал сами значения и тоже проверял на четность. Есть закономерность среди сумм и четности, ну и что, я не могу ею воспользоваться. Не могу понять как мне попасть в ячейку\элемент находящейся 3 шага вперед\назад и 1 вправо\слева (чтобы дойти до исходного элемента нужно преодолеть по горизонтали\вертикали 6 элементов). Что делать? Как это с массивами работает? for (i=0 i<3 i++){
for (j=0 j

21 Авг 2019 в 06:09
230 +1
0
Ответы
1

Для решения задачи "ход конем" на C++ можно использовать двумерный массив для представления шахматной доски и алгоритм перебора всех возможных ходов коня.

Пример кода для реализации хода конем на шахматной доске 3x3:

#include <iostream>
#include <vector>
using namespace std;
bool isValidMove(int x, int y, vector<vector<int>>& board) {
if (x >= 0 && y >= 0 && x < 3 && y < 3 && board[x][y] == 0) {
return true;
}
return false;
}
vector<pair<int, int>> possibleMoves(int x, int y, vector<vector<int>>& board) {
vector<pair<int, int>> moves;
int dx[] = {1, 2, 2, 1, -1, -2, -2, -1};
int dy[] = {2, 1, -1, -2, -2, -1, 1, 2};
for (int i = 0; i < 8; i++) {
int newX = x + dx[i];
int newY = y + dy[i];
if (isValidMove(newX, newY, board)) {
moves.push_back(make_pair(newX, newY));
}
}
return moves;
}
void knightTour(int x, int y, vector<vector<int>>& board, vector<pair<int, int>>& moves) {
board[x][y] = 1;
moves.push_back(make_pair(x, y));
if (moves.size() == 9) {
for (auto move : moves) {
cout << move.first * 3 + move.second + 1 << " ";
}
cout << endl;
board[x][y] = 0;
moves.pop_back();
return;
}
vector<pair<int, int>> possible = possibleMoves(x, y, board);
for (auto move : possible) {
knightTour(move.first, move.second, board, moves);
}
board[x][y] = 0;
moves.pop_back();
}
int main() {
vector<vector<int>> board(3, vector<int>(3, 0));
vector<pair<int, int>> moves;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
knightTour(i, j, board, moves);
}
}
return 0;
}

Этот код создаст и распечатает все возможные варианты хода конем по шахматной доске 3x3. В методе knightTour выполняется рекурсивный перебор всех возможных ходов коня на доске.

20 Апр 2024 в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир