deced

Untitled

Mar 29th, 2021 (edited)
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.57 KB | None | 0 0
  1. package com.company;
  2.  
  3. import com.sun.org.apache.xpath.internal.operations.Bool;
  4.  
  5. import java.io.*;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import java.util.Scanner;
  9.  
  10. public class Main {
  11. static Scanner consoleScanner;
  12.  
  13. public static int inputValue(int min, int max) {
  14. int ret = 0;
  15. Boolean isIncorrect = true;
  16. do {
  17. ret = Integer.parseInt(consoleScanner.nextLine());
  18. if (ret >= min && ret <= max)
  19. isIncorrect = false;
  20. else
  21. System.out.println("Введите число в заданном диапазоне");
  22. } while (isIncorrect);
  23. return ret;
  24. }
  25.  
  26. public static int[][] userInputFromConsole() {
  27. int n, m;
  28. System.out.println("Введите размерность матрицы в диапазоне 2..100");
  29. n = inputValue(2, 100);
  30. m = inputValue(2, 100);
  31. return new int[n][m];
  32. }
  33.  
  34. public static int[][] userInputMatrixFromConsole(int[][] matrix) {
  35. int n = matrix.length;
  36. int m = matrix[0].length;
  37. System.out.println("Введите элементы матрицы в диапазоне 0..1");
  38. for (int i = 0; i < n; i++) {
  39. for (int j = 0; j < m; j++) {
  40. matrix[i][j] = inputValue(0, 1);
  41. }
  42. }
  43. return matrix;
  44. }
  45.  
  46. public static int[][] userInputFromFile(String path) throws IOException {
  47. int n, m;
  48. Scanner fileScanner = new Scanner(new File(path));
  49. n = fileScanner.nextInt();
  50. m = fileScanner.nextInt();
  51. int[][] matrix = new int[n][m];
  52. for (int i = 0; i < n; i++) {
  53. for (int j = 0; j < m; j++) {
  54. matrix[i][j] = fileScanner.nextInt();
  55. }
  56. }
  57. return matrix;
  58. }
  59.  
  60. public static Boolean checkPath(String path) {
  61. File inputFile = new File(path);
  62. if (inputFile.exists()) {
  63. System.out.println(path + " найден");
  64. return true;
  65. } else {
  66. System.out.println(path + " не найден");
  67. return false;
  68. }
  69.  
  70. }
  71.  
  72. public static String userInputPath() {
  73. String path;
  74. do {
  75. System.out.println("Введите абсолютный путь к файлу с входными данными");
  76. path = consoleScanner.nextLine();
  77. } while (!checkPath(path));
  78. return path;
  79. }
  80.  
  81. public static short inputMethod() {
  82. short method;
  83. System.out.println("Каким способом хотите ввести данные?");
  84. System.out.println("1 - с помощью консоли");
  85. System.out.println("2 - с помощью файла");
  86. do {
  87. method = Short.parseShort(consoleScanner.nextLine());
  88. if (method != 1 && method != 2)
  89. System.out.println("Введите 1 или 2");
  90. } while (method != 2 && method != 1);
  91. return method;
  92. }
  93.  
  94. public static void printInConsole(int[][] a, int[][] b) {
  95. System.out.println("Исходная матрица");
  96. for (int i = 0; i < a.length; i++) {
  97. for (int j = 0; j < a[0].length; j++)
  98. System.out.print(a[i][j] + " ");
  99. System.out.println();
  100. }
  101. System.out.println();
  102. System.out.println("Найденная подматрица");
  103. for (int i = 0; i < a.length; i++) {
  104. for (int j = 0; j < a[0].length; j++)
  105. System.out.print(b[i][j] + " ");
  106. System.out.println();
  107. }
  108. }
  109.  
  110. public static void printInFile(int[][] a, int[][] b, String path) throws IOException {
  111. FileWriter fileWriter = new FileWriter(new File(path));
  112. for (int i = 0; i < a.length; i++) {
  113. for (int j = 0; j < a[0].length; j++)
  114. fileWriter.write(a[i][j] + " ");
  115. fileWriter.write("\r\n");
  116. }
  117. fileWriter.write("\r\n");
  118. for (int i = 0; i < a.length; i++) {
  119. for (int j = 0; j < a[0].length; j++)
  120. fileWriter.write(b[i][j] + " ");
  121. fileWriter.write("\r\n");
  122. }
  123. fileWriter.close();
  124. System.out.println("Результат работа помещён в файл");
  125. }
  126.  
  127. public static String userOutputPath() {
  128. String path;
  129. System.out.println("Введите абсолютный путь к файлу для вывода результата");
  130. path = consoleScanner.nextLine();
  131. return path;
  132. }
  133.  
  134. public static short outputMethod() {
  135. short method;
  136. System.out.println("Куда хотите вывести результат?");
  137. System.out.println("1 - в консоль");
  138. System.out.println("2 - в файл");
  139. do {
  140. method = Short.parseShort(consoleScanner.nextLine());
  141. if (method != 1 && method != 2)
  142. System.out.println("Введите 1 или 2");
  143. } while (method != 2 && method != 1);
  144. return method;
  145. }
  146.  
  147. public static int[][] userInput() throws IOException {
  148. int[][] matrix;
  149. short method = inputMethod();
  150. if (method == 1) {
  151. matrix = userInputFromConsole();
  152. matrix = userInputMatrixFromConsole(matrix);
  153. } else {
  154. String path = userInputPath();
  155. matrix = userInputFromFile(path);
  156. }
  157. return matrix;
  158. }
  159.  
  160. public static void printResult(int[][] a, int[][] b) throws IOException {
  161. short method = outputMethod();
  162. if (method == 1)
  163. printInConsole(a, b);
  164. else {
  165. String path = userOutputPath();
  166. printInFile(a, b, path);
  167. }
  168. }
  169.  
  170. public static int[][] findMatrix(int[][] matrix) {
  171. int n = matrix.length;
  172. int m = matrix[0].length;
  173. int[][] b = new int[n][m];
  174. for (int i = 0; i < n; i++) {
  175. for (int j = 0; j < m; j++)
  176. b[i][j] = 0;
  177. }
  178. List<Integer> a = new ArrayList<>();
  179. List<Integer> x1 = new ArrayList<>();
  180. List<Integer> x2 = new ArrayList<>();
  181. List<Integer> y1 = new ArrayList<>();
  182. List<Integer> y2 = new ArrayList<>();
  183. for (int i = 0; i < n; i++)
  184. for (int j = 0; j < m; j++)
  185. if (matrix[i][j] == 1) {
  186. int dlin = 0;
  187. int minShir = 0;
  188. int c = i;
  189. int k = j;
  190. while (matrix[c][k] == 1) {
  191. int shir = 0;
  192. while (matrix[c][k] == 1) {
  193. k++;
  194. shir++;
  195. if (minShir != 0)
  196. if (shir > minShir) {
  197. shir--;
  198. break;
  199. }
  200. if (k == m) {
  201. k--;
  202. break;
  203. }
  204. }
  205. if (minShir > shir || minShir == 0)
  206. minShir = shir;
  207. dlin++;
  208. a.add(dlin * minShir);
  209. x1.add(i);
  210. x2.add(c);
  211. y1.add(j);
  212. y2.add(y1.get(y1.size() - 1) + minShir - 1);
  213. k = j;
  214. c++;
  215. if (c == n) {
  216. c--;
  217. break;
  218. }
  219. }
  220. }
  221.  
  222. int maxId = 0;
  223. for (int i = 0; i < a.size(); i++)
  224. if (a.get(i) > a.get(maxId))
  225. maxId = i;
  226. for (int i = x1.get(maxId); i < x2.get(maxId) + 1; i++)
  227. for (int j = y1.get(maxId); j < y2.get(maxId) + 1; j++)
  228. b[i][j] = 1;
  229. return b;
  230. }
  231.  
  232. public static void printTask() {
  233. System.out.println("Данная программа находит максимальную подматрицу из единиц");
  234. }
  235.  
  236. public static void main(String[] args) throws IOException {
  237. consoleScanner = new Scanner(System.in);
  238. printTask();
  239. int[][] matrix = userInput();
  240. int[][] newMatrix = findMatrix(matrix);
  241. printResult(matrix,newMatrix);
  242. }
  243. }
  244.  
Add Comment
Please, Sign In to add comment