Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- int max = 0;
- int correct_input()
- {
- int n;
- while (!(cin >> n) || n <= 0)
- {
- cout << "\nВы ввели некорректное значение, повторите попытку.";
- cin.clear();
- while (cin.get() != '\n');
- }
- return n;
- }
- void CheckKnightForThree(int** ChessBoard, int curr, int** ChessBoardMax)
- {
- for (int i =0; i<3; i++)
- for (int j = 0; j < 3; j++)
- {
- if (i==2 && j==2) {
- if (ChessBoard[i][j] == 0)
- {
- curr++;
- ChessBoard[i][j] = 1;
- }
- if (curr > max) {
- max = curr;
- for (int k = 0; k < 3; k++)
- {
- for (int l = 0; l < 3; l++)
- {
- ChessBoardMax[k][l] = ChessBoard[k][l];
- }
- }
- }
- if (ChessBoard[i][j] == 1)
- {
- curr--;
- ChessBoard[i][j] = 0;
- }
- return;
- } else
- if (ChessBoard[i][j] == 0) {
- ChessBoard[i][j] = 1;
- curr++;
- if (i == 0)
- {
- if (j == 0)
- {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- }
- if (j == 1) {
- ChessBoard[i + 2][j + 1] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- }
- if (j == 2) {
- ChessBoard[i + 2][j - 1] += 2;
- ChessBoard[i + 1][j - 2] += 2;
- }
- }
- if (i == 1) {
- if (j == 0) {
- ChessBoard[i - 1][j + 2] += 2;
- ChessBoard[i + 1][j + 2] += 2;
- }
- if (j == 2) {
- ChessBoard[i - 1][j - 2] += 2;
- ChessBoard[i - 1][j - 2] += 2;
- }
- }
- if (i == 2)
- {
- if (j == 0)
- {
- ChessBoard[i - 1][j + 2] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- }
- if (j == 1) {
- ChessBoard[i - 2][j + 1] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- }
- if (j == 2) {
- ChessBoard[i - 2][j - 1] += 2;
- ChessBoard[i - 1][j - 2] += 2;
- }
- }
- CheckKnightForThree(ChessBoard, curr, ChessBoardMax);
- if (i == 0)
- {
- if (j == 0)
- {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- }
- if (j == 1) {
- ChessBoard[i + 2][j + 1] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- }
- if (j == 2) {
- ChessBoard[i + 2][j - 1] -= 2;
- ChessBoard[i + 1][j - 2] -= 2;
- }
- }
- if (i == 1) {
- if (j == 0) {
- ChessBoard[i - 1][j + 2] -= 2;
- ChessBoard[i + 1][j + 2] -= 2;
- }
- if (j == 2) {
- ChessBoard[i - 1][j - 2] -= 2;
- ChessBoard[i - 1][j - 2] -= 2;
- }
- }
- if (i == 2)
- {
- if (j == 0)
- {
- ChessBoard[i - 1][j + 2] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- }
- if (j == 1) {
- ChessBoard[i - 2][j + 1] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- }
- if (j == 2) {
- ChessBoard[i - 2][j - 1] -= 2;
- ChessBoard[i - 1][j - 2] -= 2;
- }
- }
- curr--;
- ChessBoard[i][j] = 0;
- }
- }
- }
- void CheckKnight(int N, int** ChessBoard, int curr, int** ChessBoardMax)
- {
- for (int i = 0; i < N; i++)
- for (int j = 0; j < N; j++)
- {
- if (i == N-1 && j == N-1) {
- if (ChessBoard[i][j] == 0)
- {
- curr++;
- ChessBoard[i][j] = 1;
- }
- if (curr > max) {
- max = curr;
- for (int k = 0; k <N; k++)
- {
- for (int l = 0; l < N; l++)
- {
- ChessBoardMax[k][l] = ChessBoard[k][l];
- }
- }
- }
- if (ChessBoard[i][j] == 1)
- {
- curr--;
- ChessBoard[i][j] = 0;
- }
- return;
- }
- else
- if (ChessBoard[i][j] == 0) {
- ChessBoard[i][j] = 1;
- curr++;
- if (i == 0)
- {
- if (j == 0)
- {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- }
- if (j == 1) {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- }
- if (j == N - 1) {
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- }
- if (j == N - 2)
- {
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- }
- if (j > 1 && j < N - 2) {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- ChessBoard[i + 1][j - 2] += 2;
- }
- }
- else if (i == 1) {
- if (j == 0)
- {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- ChessBoard[i - 1][j + 2] += 2;
- }
- if (j == 1) {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- ChessBoard[i - 1][j + 2] += 2;
- }
- if (j == N - 1) {
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- ChessBoard[i - 1][j - 2] += 2;
- }
- if (j == N - 2) {
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- ChessBoard[i - 1][j - 2] += 2;
- }
- }
- else if (i == N - 2)
- {
- if (j == 0)
- {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- ChessBoard[i - 1][j + 2] += 2;
- }
- if (j == 1) {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- ChessBoard[i - 1][j + 2] += 2;
- }
- if (j == N - 1) {
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- ChessBoard[i - 1][j - 2] += 2;
- }
- if (j == N - 2)
- {
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- ChessBoard[i - 1][j - 2] += 2;
- }
- if (j > 1 && j < N - 2) {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i - 1][j + 2] += 2;
- ChessBoard[i - 1][j - 2] += 2;
- }
- }
- else if (i == N - 1)
- {
- if (j == 0)
- {
- ChessBoard[i - 1][j + 2] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- }
- if (j == 1) {
- ChessBoard[i - 1][j + 2] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- }
- if (j == N - 1) {
- ChessBoard[i - 1][j - 2] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- }
- if (j == N - 2)
- {
- ChessBoard[i - 1][j - 2] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- }
- if (j > 1 && j < N - 2) {
- ChessBoard[i - 1][j + 2] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- ChessBoard[i - 1][j - 2] += 2;
- }
- }
- else if (i > 1 && i < N - 2)
- {
- if (j == 0)
- {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- ChessBoard[i - 1][j + 2] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- }
- if (j == 1) {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- ChessBoard[i - 1][j + 2] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- }
- if (j == N - 1) {
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- ChessBoard[i - 1][j - 2] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- }
- if (j == N - 2)
- {
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- ChessBoard[i - 1][j - 2] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- }
- if (j > 1 && j < N - 2) {
- ChessBoard[i + 1][j + 2] += 2;
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i - 1][j + 2] += 2;
- ChessBoard[i + 1][j - 2] += 2;
- ChessBoard[i + 2][j + 1] += 2;
- ChessBoard[i + 2][j - 1] += 2;
- ChessBoard[i - 2][j + 1] += 2;
- ChessBoard[i - 2][j - 1] += 2;
- }
- }
- CheckKnight(N, ChessBoard, curr, ChessBoardMax);
- if (i == 0)
- {
- if (j == 0)
- {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- }
- if (j == 1) {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- }
- if (j == N - 1) {
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- }
- if (j == N - 2)
- {
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- }
- if (j > 1 && j < N - 2) {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- ChessBoard[i + 1][j - 2] -= 2;
- }
- }
- else if (i == 1) {
- if (j == 0)
- {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- ChessBoard[i - 1][j + 2] -= 2;
- }
- if (j == 1) {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- ChessBoard[i - 1][j + 2] -= 2;
- }
- if (j == N - 1) {
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- ChessBoard[i - 1][j - 2] -= 2;
- }
- if (j == N - 2) {
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- ChessBoard[i - 1][j - 2] -= 2;
- }
- }
- else if (i == N - 2)
- {
- if (j == 0)
- {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- ChessBoard[i - 1][j + 2] -= 2;
- }
- if (j == 1) {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- ChessBoard[i - 1][j + 2] -= 2;
- }
- if (j == N - 1) {
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- ChessBoard[i - 1][j - 2] -= 2;
- }
- if (j == N - 2)
- {
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- ChessBoard[i - 1][j - 2] -= 2;
- }
- if (j > 1 && j < N - 2) {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i - 1][j + 2] -= 2;
- ChessBoard[i - 1][j - 2] -= 2;
- }
- }
- else if (i == N - 1)
- {
- if (j == 0)
- {
- ChessBoard[i - 1][j + 2] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- }
- if (j == 1) {
- ChessBoard[i - 1][j + 2] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- }
- if (j == N - 1) {
- ChessBoard[i - 1][j - 2] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- }
- if (j == N - 2)
- {
- ChessBoard[i - 1][j - 2] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- }
- if (j > 1 && j < N - 2) {
- ChessBoard[i - 1][j + 2] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- ChessBoard[i - 1][j - 2] -= 2;
- }
- }
- else if (i > 1 && i < N - 2)
- {
- if (j == 0)
- {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- ChessBoard[i - 1][j + 2] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- }
- if (j == 1) {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- ChessBoard[i - 1][j + 2] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- }
- if (j == N - 1) {
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- ChessBoard[i - 1][j - 2] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- }
- if (j == N - 2)
- {
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- ChessBoard[i - 1][j - 2] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- }
- if (j > 1 && j < N - 2) {
- ChessBoard[i + 1][j + 2] -= 2;
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i - 1][j + 2] -= 2;
- ChessBoard[i + 1][j - 2] -= 2;
- ChessBoard[i + 2][j + 1] -= 2;
- ChessBoard[i + 2][j - 1] -= 2;
- ChessBoard[i - 2][j + 1] -= 2;
- ChessBoard[i - 2][j - 1] -= 2;
- }
- }
- curr--;
- ChessBoard[i][j] = 0;
- }
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- int N, max, curr;
- cout << "Введите размерность шахматной доски:" << endl;
- N = correct_input();
- cin.ignore();
- cout << "\nВы ввели корректное значение. Доска будет размером " << N << " на " << N << endl;
- int** ChessBoard = new int*[N];
- int** ChessBoardMax = new int*[N];
- for (int i = 0; i < N; i++)
- {
- ChessBoard[i] = new int[N];
- ChessBoardMax[i] = new int[N];
- }
- for (int i = 0; i < N; i++)
- for (int j = 0; j < N; j++)
- {
- ChessBoard[i][j] = 0;
- ChessBoardMax[i][j] = 0;
- }
- curr = 0;
- if (N == 3) CheckKnightForThree(ChessBoard, curr, ChessBoardMax);
- else CheckKnight(N,ChessBoard, curr, ChessBoardMax);
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < N; j++)
- {
- if (ChessBoardMax[i][j] != 1) ChessBoardMax[i][j] = 0;
- cout << ChessBoardMax[i][j] << "\t";
- }
- cout << endl;
- }
- for (int i = 0; i < N; i++)
- {
- delete[]ChessBoard[i];
- delete[]ChessBoardMax[i];
- }
- delete[]ChessBoard;
- delete[]ChessBoardMax;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement