Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.57 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement