Advertisement
desislava_topuzakova

07. Knight Game

Sep 18th, 2023
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.25 KB | None | 0 0
  1. //КВАДРАТНА МАТРИЦА
  2. int size = int.Parse(Console.ReadLine()); //бр.редове = бр. колони
  3.  
  4. //? размерът е 1 или 2 -> < 3
  5. if (size < 3)
  6. {
  7. Console.WriteLine(0);
  8. return;
  9. }
  10.  
  11. int countRemoved = 0; //брой премахнати коне
  12.  
  13. char[,] matrix = new char[size, size]; //поле за игра
  14.  
  15. //Прочитане на матрица от конзолата
  16. for (int row = 0; row <= size - 1; row++) //всички редове от първия до последния
  17. {
  18. char[] symbols = Console.ReadLine().ToArray();
  19. for (int col = 0; col <= size - 1; col++)
  20. {
  21. matrix[row, col] = symbols[col];
  22. }
  23. }
  24.  
  25. //обхождаме полето и премахваме коне, докато не останем само с добри коне = атакуват 0 други коне
  26. while (true)
  27. {
  28. int maxAttack = 0; //брой на максималните атаки от кон
  29. int rowMaxAttack = 0; //ред на най-атакуващия кон
  30. int colMaxAttack = 0; //колона на най-атакуващия кон
  31.  
  32. for (int row = 0; row < size; row++)
  33. {
  34. for (int col = 0; col < size; col++)
  35. {
  36. char currentElement = matrix[row, col];
  37. if (currentElement == 'K')
  38. {
  39. //кон
  40. //1. при движения колко коня атакуване (натъпване при преместване)
  41. int countAttackedKnights = CalculateAttackedKnight(row, col, size, matrix);
  42. //2. проверка дали е най-атакуващия
  43. if (countAttackedKnights > maxAttack) //кой е коня с най-много атаки
  44. {
  45. maxAttack = countAttackedKnights;
  46. rowMaxAttack = row;
  47. colMaxAttack = col;
  48. }
  49.  
  50.  
  51. }
  52. }
  53. }
  54. //намеря най-атакуващия кон
  55. if (maxAttack == 0)
  56. {
  57. // нямам коне, които да атакуват
  58. break;
  59. }
  60. else
  61. {
  62. //имам кон за премахване
  63. matrix[rowMaxAttack, colMaxAttack] = '0';
  64. countRemoved++;
  65. }
  66. }
  67.  
  68. Console.WriteLine(countRemoved);
  69.  
  70.  
  71. //брой на атакуваните коне от текущия кон
  72.  
  73. static int CalculateAttackedKnight (int row, int col, int size, char[, ] matrix)
  74. {
  75. int count = 0;
  76. //2 нагоре и 1 надясно -> ред - 2, колона + 1
  77. if (IsValid(row - 2, col + 1, size))
  78. {
  79. //съществуват такива ред и колона -> проверка дали има кон
  80. if (matrix[row - 2, col + 1] == 'K')
  81. {
  82. count++;
  83. }
  84. }
  85. //2 нагоре и 1 наляво -> ред - 2, кол - 1
  86. if (IsValid(row - 2, col - 1, size))
  87. {
  88. //съществуват такива ред и колона -> проверка дали има кон
  89. if (matrix[row - 2, col - 1] == 'K')
  90. {
  91. count++;
  92. }
  93. }
  94. //2 надолу и 1 наляво -> ред + 2, колона - 1
  95. if (IsValid(row + 2, col - 1, size))
  96. {
  97. //съществуват такива ред и колона -> проверка дали има кон
  98. if (matrix[row + 2, col - 1] == 'K')
  99. {
  100. count++;
  101. }
  102. }
  103. //2 надолу и 1 надясно -> ред + 2, колона + 1
  104. if (IsValid(row + 2, col + 1, size))
  105. {
  106. //съществуват такива ред и колона -> проверка дали има кон
  107. if (matrix[row + 2, col + 1] == 'K')
  108. {
  109. count++;
  110. }
  111. }
  112. //2 надясно и 1 надолу 0 -> ред + 1, колона + 2
  113. if (IsValid(row + 1, col + 2, size))
  114. {
  115. //съществуват такива ред и колона -> проверка дали има кон
  116. if (matrix[row + 1, col + 2] == 'K')
  117. {
  118. count++;
  119. }
  120. }
  121.  
  122. //2 надясно и 1 нагоре->ред - 1, колона + 2
  123. if (IsValid(row - 1, col + 2, size))
  124. {
  125. //съществуват такива ред и колона -> проверка дали има кон
  126. if (matrix[row - 1, col + 2] == 'K')
  127. {
  128. count++;
  129. }
  130. }
  131.  
  132. // 2 наляво и 1 нагоре -> ред - 1, колона - 2
  133. if (IsValid(row - 1, col - 2, size))
  134. {
  135. //съществуват такива ред и колона -> проверка дали има кон
  136. if (matrix[row - 1, col - 2] == 'K')
  137. {
  138. count++;
  139. }
  140. }
  141.  
  142. // 2 наляво и 1 надолу -> ред + 1, колона - 2
  143. if (IsValid(row + 1, col - 2, size))
  144. {
  145. //съществуват такива ред и колона -> проверка дали има кон
  146. if (matrix[row + 1, col - 2] == 'K')
  147. {
  148. count++;
  149. }
  150. }
  151.  
  152. return count;
  153.  
  154. }
  155.  
  156. static bool IsValid(int row, int col, int size)
  157. {
  158. return row >= 0 && row < size && col >= 0 && col < size;
  159. }
  160.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement