SHARE
TWEET

Untitled

a guest Jun 24th, 2019 50 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "stdafx.h"
  2. #include <iostream>
  3. using namespace std;
  4. int max = 0;
  5. int correct_input()
  6. {
  7.     int n;
  8.     while (!(cin >> n) || n <= 0)
  9.     {
  10.         cout << "\nВы ввели некорректное значение, повторите попытку.";
  11.         cin.clear();
  12.         while (cin.get() != '\n');
  13.  
  14.     }
  15.     return n;
  16. }
  17. void CheckKnightForThree(int** ChessBoard, int curr,  int** ChessBoardMax)
  18. {
  19.     for (int i =0; i<3; i++)
  20.         for (int j = 0; j < 3; j++)
  21.         {
  22.             if (i==2 && j==2) {
  23.                 if (ChessBoard[i][j] == 0)
  24.                 {
  25.                     curr++;
  26.                     ChessBoard[i][j] = 1;
  27.                 }
  28.                     if (curr > max) {
  29.                         max = curr;
  30.                        
  31.                         for (int k = 0; k < 3; k++)
  32.                         {
  33.                             for (int l = 0; l < 3; l++)
  34.                             {
  35.                                 ChessBoardMax[k][l] = ChessBoard[k][l];
  36.                                
  37.                             }
  38.                            
  39.                         }
  40.                        
  41.                     }
  42.                     if (ChessBoard[i][j] == 1)
  43.                     {
  44.                         curr--;
  45.                         ChessBoard[i][j] = 0;
  46.                     }
  47.                     return;
  48.  
  49.                
  50.             } else
  51.                 if (ChessBoard[i][j] == 0) {
  52.                         ChessBoard[i][j] = 1;
  53.                         curr++;
  54.                     if (i == 0)
  55.                     {
  56.                         if (j == 0)
  57.                         {
  58.                             ChessBoard[i + 1][j + 2] += 2;
  59.                             ChessBoard[i + 2][j + 1] += 2;
  60.                         }
  61.                         if (j == 1) {
  62.                             ChessBoard[i + 2][j + 1] += 2;
  63.                             ChessBoard[i + 2][j - 1] += 2;
  64.                         }
  65.                         if (j == 2) {
  66.                             ChessBoard[i + 2][j - 1] += 2;
  67.                             ChessBoard[i + 1][j - 2] += 2;
  68.                         }
  69.                     }
  70.                     if (i == 1) {
  71.                         if (j == 0) {
  72.                             ChessBoard[i - 1][j + 2] += 2;
  73.                             ChessBoard[i + 1][j + 2] += 2;
  74.                         }
  75.                         if (j == 2) {
  76.                             ChessBoard[i - 1][j - 2] += 2;
  77.                             ChessBoard[i - 1][j - 2] += 2;
  78.                         }
  79.                     }
  80.                     if (i == 2)
  81.                     {
  82.                         if (j == 0)
  83.                         {
  84.                             ChessBoard[i - 1][j + 2] += 2;
  85.                             ChessBoard[i - 2][j + 1] += 2;
  86.                         }
  87.                         if (j == 1) {
  88.                             ChessBoard[i - 2][j + 1] += 2;
  89.                             ChessBoard[i - 2][j - 1] += 2;
  90.                         }
  91.                         if (j == 2) {
  92.                             ChessBoard[i - 2][j - 1] += 2;
  93.                             ChessBoard[i - 1][j - 2] += 2;
  94.                         }
  95.                     }
  96.                     CheckKnightForThree(ChessBoard, curr,  ChessBoardMax);
  97.                     if (i == 0)
  98.                     {
  99.                         if (j == 0)
  100.                         {
  101.                             ChessBoard[i + 1][j + 2] -= 2;
  102.                             ChessBoard[i + 2][j + 1] -= 2;
  103.                         }
  104.                         if (j == 1) {
  105.                             ChessBoard[i + 2][j + 1] -= 2;
  106.                             ChessBoard[i + 2][j - 1] -= 2;
  107.                         }
  108.                         if (j == 2) {
  109.                             ChessBoard[i + 2][j - 1] -= 2;
  110.                             ChessBoard[i + 1][j - 2] -= 2;
  111.                         }
  112.                     }
  113.                     if (i == 1) {
  114.                         if (j == 0) {
  115.                             ChessBoard[i - 1][j + 2] -= 2;
  116.                             ChessBoard[i + 1][j + 2] -= 2;
  117.                         }
  118.                         if (j == 2) {
  119.                             ChessBoard[i - 1][j - 2] -= 2;
  120.                             ChessBoard[i - 1][j - 2] -= 2;
  121.                         }
  122.                     }
  123.                     if (i == 2)
  124.                     {
  125.                         if (j == 0)
  126.                         {
  127.                             ChessBoard[i - 1][j + 2] -= 2;
  128.                             ChessBoard[i - 2][j + 1] -= 2;
  129.                         }
  130.                         if (j == 1) {
  131.                             ChessBoard[i - 2][j + 1] -= 2;
  132.                             ChessBoard[i - 2][j - 1] -= 2;
  133.                         }
  134.                         if (j == 2) {
  135.                             ChessBoard[i - 2][j - 1] -= 2;
  136.                             ChessBoard[i - 1][j - 2] -= 2;
  137.                         }
  138.                     }
  139.                     curr--;
  140.                     ChessBoard[i][j] = 0;
  141.  
  142.             }
  143.         }
  144. }
  145. void CheckKnight(int N, int** ChessBoard, int curr,  int** ChessBoardMax)
  146. {
  147.    
  148.     for (int i = 0; i < N; i++)
  149.         for (int j = 0; j < N; j++)
  150.         {
  151.             if (i == N-1 && j == N-1) {
  152.                 if (ChessBoard[i][j] == 0)
  153.                 {
  154.                     curr++;
  155.                     ChessBoard[i][j] = 1;
  156.                 }
  157.                 if (curr > max) {
  158.                     max = curr;
  159.  
  160.                     for (int k = 0; k <N; k++)
  161.                     {
  162.                         for (int l = 0; l < N; l++)
  163.                         {
  164.                             ChessBoardMax[k][l] = ChessBoard[k][l];
  165.                            
  166.                         }
  167.                        
  168.                     }
  169.                    
  170.                 }
  171.                 if (ChessBoard[i][j] == 1)
  172.                 {
  173.                     curr--;
  174.                     ChessBoard[i][j] = 0;
  175.                 }
  176.                 return;
  177.  
  178.             }
  179.             else
  180.             if (ChessBoard[i][j] == 0) {
  181.                 ChessBoard[i][j] = 1;
  182.                 curr++;
  183.                 if (i == 0)
  184.                 {
  185.                     if (j == 0)
  186.                     {
  187.                         ChessBoard[i + 1][j + 2] += 2;
  188.                         ChessBoard[i + 2][j + 1] += 2;
  189.                     }
  190.                     if (j == 1) {
  191.                         ChessBoard[i + 1][j + 2] += 2;
  192.                         ChessBoard[i + 2][j + 1] += 2;
  193.                         ChessBoard[i + 2][j - 1] += 2;
  194.                     }
  195.                     if (j == N - 1) {
  196.                         ChessBoard[i + 1][j - 2] += 2;
  197.                         ChessBoard[i + 2][j - 1] += 2;
  198.                     }
  199.                     if (j == N - 2)
  200.                     {
  201.                         ChessBoard[i + 1][j - 2] += 2;
  202.                         ChessBoard[i + 2][j - 1] += 2;
  203.                         ChessBoard[i + 2][j + 1] += 2;
  204.                     }
  205.                     if (j > 1 && j < N - 2) {
  206.                         ChessBoard[i + 1][j + 2] += 2;
  207.                         ChessBoard[i + 2][j + 1] += 2;
  208.                         ChessBoard[i + 2][j - 1] += 2;
  209.                         ChessBoard[i + 1][j - 2] += 2;
  210.                     }
  211.                 }
  212.                 else if (i == 1) {
  213.                     if (j == 0)
  214.                     {
  215.                         ChessBoard[i + 1][j + 2] += 2;
  216.                         ChessBoard[i + 2][j + 1] += 2;
  217.                         ChessBoard[i - 1][j + 2] += 2;
  218.                     }
  219.                     if (j == 1) {
  220.                         ChessBoard[i + 1][j + 2] += 2;
  221.                         ChessBoard[i + 2][j + 1] += 2;
  222.                         ChessBoard[i + 2][j - 1] += 2;
  223.                         ChessBoard[i - 1][j + 2] += 2;
  224.                     }
  225.                     if (j == N - 1) {
  226.                         ChessBoard[i + 1][j - 2] += 2;
  227.                         ChessBoard[i + 2][j - 1] += 2;
  228.                         ChessBoard[i - 1][j - 2] += 2;
  229.                     }
  230.                     if (j == N - 2) {
  231.                         ChessBoard[i + 1][j - 2] += 2;
  232.                         ChessBoard[i + 2][j - 1] += 2;
  233.                         ChessBoard[i + 2][j + 1] += 2;
  234.                         ChessBoard[i - 1][j - 2] += 2;
  235.                     }
  236.                 }
  237.                 else if (i == N - 2)
  238.                 {
  239.                     if (j == 0)
  240.                     {
  241.                         ChessBoard[i + 1][j + 2] += 2;
  242.                         ChessBoard[i - 2][j + 1] += 2;
  243.                         ChessBoard[i - 1][j + 2] += 2;
  244.                     }
  245.                     if (j == 1) {
  246.                         ChessBoard[i + 1][j + 2] += 2;
  247.                         ChessBoard[i - 2][j + 1] += 2;
  248.                         ChessBoard[i - 2][j - 1] += 2;
  249.                         ChessBoard[i - 1][j + 2] += 2;
  250.                     }
  251.                     if (j == N - 1) {
  252.                         ChessBoard[i + 1][j - 2] += 2;
  253.                         ChessBoard[i - 2][j - 1] += 2;
  254.                         ChessBoard[i - 1][j - 2] += 2;
  255.                     }
  256.                     if (j == N - 2)
  257.                     {
  258.                         ChessBoard[i + 1][j - 2] += 2;
  259.                         ChessBoard[i - 2][j - 1] += 2;
  260.                         ChessBoard[i - 2][j + 1] += 2;
  261.                         ChessBoard[i - 1][j - 2] += 2;
  262.                     }
  263.                     if (j > 1 && j < N - 2) {
  264.                         ChessBoard[i + 1][j + 2] += 2;
  265.                         ChessBoard[i - 2][j + 1] += 2;
  266.                         ChessBoard[i - 2][j - 1] += 2;
  267.                         ChessBoard[i + 1][j - 2] += 2;
  268.                         ChessBoard[i - 1][j + 2] += 2;
  269.                         ChessBoard[i - 1][j - 2] += 2;
  270.                     }
  271.                 }
  272.                 else if (i == N - 1)
  273.                 {
  274.                     if (j == 0)
  275.                     {
  276.                         ChessBoard[i - 1][j + 2] += 2;
  277.                         ChessBoard[i - 2][j + 1] += 2;
  278.                     }
  279.                     if (j == 1) {
  280.                         ChessBoard[i - 1][j + 2] += 2;
  281.                         ChessBoard[i - 2][j + 1] += 2;
  282.                         ChessBoard[i - 2][j - 1] += 2;
  283.                     }
  284.                     if (j == N - 1) {
  285.                         ChessBoard[i - 1][j - 2] += 2;
  286.                         ChessBoard[i - 2][j - 1] += 2;
  287.                     }
  288.                     if (j == N - 2)
  289.                     {
  290.                         ChessBoard[i - 1][j - 2] += 2;
  291.                         ChessBoard[i - 2][j - 1] += 2;
  292.                         ChessBoard[i - 2][j + 1] += 2;
  293.                     }
  294.                     if (j > 1 && j < N - 2) {
  295.                         ChessBoard[i - 1][j + 2] += 2;
  296.                         ChessBoard[i - 2][j + 1] += 2;
  297.                         ChessBoard[i - 2][j - 1] += 2;
  298.                         ChessBoard[i - 1][j - 2] += 2;
  299.                     }
  300.                 }
  301.                 else if (i > 1 && i < N - 2)
  302.                 {
  303.                     if (j == 0)
  304.                     {
  305.                         ChessBoard[i + 1][j + 2] += 2;
  306.                         ChessBoard[i + 2][j + 1] += 2;
  307.                         ChessBoard[i - 1][j + 2] += 2;
  308.                         ChessBoard[i - 2][j + 1] += 2;
  309.                     }
  310.                     if (j == 1) {
  311.                         ChessBoard[i + 1][j + 2] += 2;
  312.                         ChessBoard[i + 2][j + 1] += 2;
  313.                         ChessBoard[i - 1][j + 2] += 2;
  314.                         ChessBoard[i - 2][j + 1] += 2;
  315.                         ChessBoard[i + 2][j - 1] += 2;
  316.                         ChessBoard[i - 2][j - 1] += 2;
  317.                     }
  318.                     if (j == N - 1) {
  319.                         ChessBoard[i + 1][j - 2] += 2;
  320.                         ChessBoard[i + 2][j - 1] += 2;
  321.                         ChessBoard[i - 1][j - 2] += 2;
  322.                         ChessBoard[i - 2][j - 1] += 2;
  323.                     }
  324.                     if (j == N - 2)
  325.                     {
  326.                         ChessBoard[i + 1][j - 2] += 2;
  327.                         ChessBoard[i + 2][j + 1] += 2;
  328.                         ChessBoard[i - 1][j - 2] += 2;
  329.                         ChessBoard[i - 2][j + 1] += 2;
  330.                         ChessBoard[i + 2][j - 1] += 2;
  331.                         ChessBoard[i - 2][j - 1] += 2;
  332.                     }
  333.                     if (j > 1 && j < N - 2) {
  334.                         ChessBoard[i + 1][j + 2] += 2;
  335.                         ChessBoard[i + 1][j - 2] += 2;
  336.                         ChessBoard[i - 1][j + 2] += 2;
  337.                         ChessBoard[i + 1][j - 2] += 2;
  338.                         ChessBoard[i + 2][j + 1] += 2;
  339.                         ChessBoard[i + 2][j - 1] += 2;
  340.                         ChessBoard[i - 2][j + 1] += 2;
  341.                         ChessBoard[i - 2][j - 1] += 2;
  342.                     }
  343.                 }
  344.                
  345.               CheckKnight(N, ChessBoard, curr,  ChessBoardMax);
  346.                 if (i == 0)
  347.                 {
  348.                     if (j == 0)
  349.                     {
  350.                         ChessBoard[i + 1][j + 2] -= 2;
  351.                         ChessBoard[i + 2][j + 1] -= 2;
  352.                     }
  353.                     if (j == 1) {
  354.                         ChessBoard[i + 1][j + 2] -= 2;
  355.                         ChessBoard[i + 2][j + 1] -= 2;
  356.                         ChessBoard[i + 2][j - 1] -= 2;
  357.                     }
  358.                     if (j == N - 1) {
  359.                         ChessBoard[i + 1][j - 2] -= 2;
  360.                         ChessBoard[i + 2][j - 1] -= 2;
  361.                     }
  362.                     if (j == N - 2)
  363.                     {
  364.                         ChessBoard[i + 1][j - 2] -= 2;
  365.                         ChessBoard[i + 2][j - 1] -= 2;
  366.                         ChessBoard[i + 2][j + 1] -= 2;
  367.                     }
  368.                     if (j > 1 && j < N - 2) {
  369.                         ChessBoard[i + 1][j + 2] -= 2;
  370.                         ChessBoard[i + 2][j + 1] -= 2;
  371.                         ChessBoard[i + 2][j - 1] -= 2;
  372.                         ChessBoard[i + 1][j - 2] -= 2;
  373.                     }
  374.                 }
  375.                 else if (i == 1) {
  376.                     if (j == 0)
  377.                     {
  378.                         ChessBoard[i + 1][j + 2] -= 2;
  379.                         ChessBoard[i + 2][j + 1] -= 2;
  380.                         ChessBoard[i - 1][j + 2] -= 2;
  381.                     }
  382.                     if (j == 1) {
  383.                         ChessBoard[i + 1][j + 2] -= 2;
  384.                         ChessBoard[i + 2][j + 1] -= 2;
  385.                         ChessBoard[i + 2][j - 1] -= 2;
  386.                         ChessBoard[i - 1][j + 2] -= 2;
  387.                     }
  388.                     if (j == N - 1) {
  389.                         ChessBoard[i + 1][j - 2] -= 2;
  390.                         ChessBoard[i + 2][j - 1] -= 2;
  391.                         ChessBoard[i - 1][j - 2] -= 2;
  392.                     }
  393.                     if (j == N - 2) {
  394.                         ChessBoard[i + 1][j - 2] -= 2;
  395.                         ChessBoard[i + 2][j - 1] -= 2;
  396.                         ChessBoard[i + 2][j + 1] -= 2;
  397.                         ChessBoard[i - 1][j - 2] -= 2;
  398.                     }
  399.                 }
  400.                 else if (i == N - 2)
  401.                 {
  402.                     if (j == 0)
  403.                     {
  404.                         ChessBoard[i + 1][j + 2] -= 2;
  405.                         ChessBoard[i - 2][j + 1] -= 2;
  406.                         ChessBoard[i - 1][j + 2] -= 2;
  407.                     }
  408.                     if (j == 1) {
  409.                         ChessBoard[i + 1][j + 2] -= 2;
  410.                         ChessBoard[i - 2][j + 1] -= 2;
  411.                         ChessBoard[i - 2][j - 1] -= 2;
  412.                         ChessBoard[i - 1][j + 2] -= 2;
  413.                     }
  414.                     if (j == N - 1) {
  415.                         ChessBoard[i + 1][j - 2] -= 2;
  416.                         ChessBoard[i - 2][j - 1] -= 2;
  417.                         ChessBoard[i - 1][j - 2] -= 2;
  418.                     }
  419.                     if (j == N - 2)
  420.                     {
  421.                         ChessBoard[i + 1][j - 2] -= 2;
  422.                         ChessBoard[i - 2][j - 1] -= 2;
  423.                         ChessBoard[i - 2][j + 1] -= 2;
  424.                         ChessBoard[i - 1][j - 2] -= 2;
  425.                     }
  426.                     if (j > 1 && j < N - 2) {
  427.                         ChessBoard[i + 1][j + 2] -= 2;
  428.                         ChessBoard[i - 2][j + 1] -= 2;
  429.                         ChessBoard[i - 2][j - 1] -= 2;
  430.                         ChessBoard[i + 1][j - 2] -= 2;
  431.                         ChessBoard[i - 1][j + 2] -= 2;
  432.                         ChessBoard[i - 1][j - 2] -= 2;
  433.                     }
  434.                 }
  435.                 else if (i == N - 1)
  436.                 {
  437.                     if (j == 0)
  438.                     {
  439.                         ChessBoard[i - 1][j + 2] -= 2;
  440.                         ChessBoard[i - 2][j + 1] -= 2;
  441.                     }
  442.                     if (j == 1) {
  443.                         ChessBoard[i - 1][j + 2] -= 2;
  444.                         ChessBoard[i - 2][j + 1] -= 2;
  445.                         ChessBoard[i - 2][j - 1] -= 2;
  446.                     }
  447.                     if (j == N - 1) {
  448.                         ChessBoard[i - 1][j - 2] -= 2;
  449.                         ChessBoard[i - 2][j - 1] -= 2;
  450.                     }
  451.                     if (j == N - 2)
  452.                     {
  453.                         ChessBoard[i - 1][j - 2] -= 2;
  454.                         ChessBoard[i - 2][j - 1] -= 2;
  455.                         ChessBoard[i - 2][j + 1] -= 2;
  456.                     }
  457.                     if (j > 1 && j < N - 2) {
  458.                         ChessBoard[i - 1][j + 2] -= 2;
  459.                         ChessBoard[i - 2][j + 1] -= 2;
  460.                         ChessBoard[i - 2][j - 1] -= 2;
  461.                         ChessBoard[i - 1][j - 2] -= 2;
  462.                     }
  463.                 }
  464.                 else if (i > 1 && i < N - 2)
  465.                 {
  466.                     if (j == 0)
  467.                     {
  468.                         ChessBoard[i + 1][j + 2] -= 2;
  469.                         ChessBoard[i + 2][j + 1] -= 2;
  470.                         ChessBoard[i - 1][j + 2] -= 2;
  471.                         ChessBoard[i - 2][j + 1] -= 2;
  472.                     }
  473.                     if (j == 1) {
  474.                         ChessBoard[i + 1][j + 2] -= 2;
  475.                         ChessBoard[i + 2][j + 1] -= 2;
  476.                         ChessBoard[i - 1][j + 2] -= 2;
  477.                         ChessBoard[i - 2][j + 1] -= 2;
  478.                         ChessBoard[i + 2][j - 1] -= 2;
  479.                         ChessBoard[i - 2][j - 1] -= 2;
  480.                     }
  481.                     if (j == N - 1) {
  482.                         ChessBoard[i + 1][j - 2] -= 2;
  483.                         ChessBoard[i + 2][j - 1] -= 2;
  484.                         ChessBoard[i - 1][j - 2] -= 2;
  485.                         ChessBoard[i - 2][j - 1] -= 2;
  486.                     }
  487.                     if (j == N - 2)
  488.                     {
  489.                         ChessBoard[i + 1][j - 2] -= 2;
  490.                         ChessBoard[i + 2][j + 1] -= 2;
  491.                         ChessBoard[i - 1][j - 2] -= 2;
  492.                         ChessBoard[i - 2][j + 1] -= 2;
  493.                         ChessBoard[i + 2][j - 1] -= 2;
  494.                         ChessBoard[i - 2][j - 1] -= 2;
  495.                     }
  496.                     if (j > 1 && j < N - 2) {
  497.                         ChessBoard[i + 1][j + 2] -= 2;
  498.                         ChessBoard[i + 1][j - 2] -= 2;
  499.                         ChessBoard[i - 1][j + 2] -= 2;
  500.                         ChessBoard[i + 1][j - 2] -= 2;
  501.                         ChessBoard[i + 2][j + 1] -= 2;
  502.                         ChessBoard[i + 2][j - 1] -= 2;
  503.                         ChessBoard[i - 2][j + 1] -= 2;
  504.                         ChessBoard[i - 2][j - 1] -= 2;
  505.                     }
  506.                 }
  507.                 curr--;
  508.                 ChessBoard[i][j] = 0;
  509.  
  510.  
  511.  
  512.             }
  513.         }
  514.  
  515.  
  516. }
  517.  
  518.  
  519. int main()
  520. {
  521.     setlocale(LC_ALL, "Russian");
  522.     int N, max, curr;
  523.     cout << "Введите размерность шахматной доски:" << endl;
  524.     N = correct_input();
  525.     cin.ignore();
  526.     cout << "\nВы ввели корректное значение. Доска будет размером " << N << " на " << N << endl;
  527.     int** ChessBoard = new int*[N];
  528.     int** ChessBoardMax = new int*[N];
  529.     for (int i = 0; i < N; i++)
  530.     {
  531.         ChessBoard[i] = new int[N];
  532.         ChessBoardMax[i] = new int[N];
  533.     }
  534.     for (int i = 0; i < N; i++)
  535.         for (int j = 0; j < N; j++)
  536.         {
  537.             ChessBoard[i][j] = 0;
  538.             ChessBoardMax[i][j] = 0;
  539.         }
  540.        
  541.         curr = 0;
  542.         if (N == 3) CheckKnightForThree(ChessBoard, curr, ChessBoardMax);
  543.         else CheckKnight(N,ChessBoard, curr, ChessBoardMax);
  544.     for (int i = 0; i < N; i++)
  545.     {
  546.         for (int j = 0; j < N; j++)
  547.         {
  548.             if (ChessBoardMax[i][j] != 1) ChessBoardMax[i][j] = 0;
  549.             cout << ChessBoardMax[i][j] << "\t";
  550.         }
  551.         cout << endl;
  552.  
  553.     }
  554.     for (int i = 0; i < N; i++)
  555.     {
  556.         delete[]ChessBoard[i];
  557.         delete[]ChessBoardMax[i];
  558.     }
  559.     delete[]ChessBoard;
  560.     delete[]ChessBoardMax;
  561.  
  562.  
  563.     system("pause");
  564. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top