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

21 Авг 2019 в 06:09
199 +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 Апр в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир