Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. struct Point {
  8. int x, y;
  9. Point() {};
  10. void init(int a, int b)
  11. {
  12. x = a;
  13. y = b;
  14. }
  15. };
  16. void init();
  17. void func(Point p);
  18. queue<Point> myQueue;
  19. int n = 3, m = 3;
  20. int** oldMatrix;
  21. int** matrix;
  22. int max_;
  23. int main()
  24. {
  25. Point point;
  26. ifstream fin("in.txt"); // открыли файл для чтения
  27. fin >> n;
  28. fin >> m;
  29. max_ = -1;
  30. oldMatrix = new int*[n];
  31. matrix = new int*[n];
  32. for (int i = 0; i < n; i++)
  33. {
  34. oldMatrix[i] = new int[m];
  35. matrix[i] = new int[m];
  36.  
  37. }
  38. for (int i = 0; i < n; i++)
  39. for (int j = 0; j < m; j++)
  40. {
  41. fin >> oldMatrix[i][j];
  42. if (oldMatrix[i][j] > max_)
  43. max_ = oldMatrix[i][j];
  44. }
  45. fin.close();
  46. init();
  47. while (myQueue.size() != 0)
  48. {
  49. point = myQueue.front();
  50. myQueue.pop();
  51. if(matrix[point.x][point.y]!= max_)
  52. func(point);
  53. }
  54. int res = 0;
  55. for (int i = 0; i < n; i++)
  56. for (int j = 0; j < m; j++)
  57. res += (matrix[i][j] - oldMatrix[i][j]);
  58. ofstream fout("out.txt"); // создаём объект класса ofstream для записи и связываем его с файлом cppstudio.txt
  59. fout << res;
  60. fout.close(); // закрываем файл
  61. return 0;
  62. }
  63. void func(Point point)
  64. {
  65. Point pointT;
  66. if (point.x > 0)
  67. if (matrix[point.x - 1][point.y] > matrix[point.x][point.y])
  68. {
  69. if (matrix[point.x][point.y] > oldMatrix[point.x - 1][point.y])
  70. matrix[point.x - 1][point.y] = matrix[point.x][point.y];
  71. else
  72. matrix[point.x - 1][point.y] = oldMatrix[point.x - 1][point.y];
  73. pointT.x = point.x - 1;
  74. pointT.y = point.y;
  75. if(matrix[point.x - 1][point.y]!=max_)
  76. myQueue.push(pointT);
  77. }
  78.  
  79. if (point.x < n - 1)
  80. if (matrix[point.x + 1][point.y] > matrix[point.x][point.y])
  81. {
  82. if (matrix[point.x][point.y] > oldMatrix[point.x + 1][point.y])
  83. matrix[point.x + 1][point.y] = matrix[point.x][point.y];
  84. else
  85. matrix[point.x + 1][point.y] = oldMatrix[point.x + 1][point.y];
  86. pointT.x = point.x + 1;
  87. pointT.y = point.y;
  88. if (matrix[point.x + 1][point.y] != max_)
  89. myQueue.push(pointT);
  90. }
  91. if (point.y < m - 1)
  92. if (matrix[point.x][point.y + 1] > matrix[point.x][point.y])
  93. {
  94. if (matrix[point.x][point.y] > oldMatrix[point.x][point.y + 1])
  95. matrix[point.x][point.y + 1] = matrix[point.x][point.y];
  96. else
  97. matrix[point.x][point.y + 1] = oldMatrix[point.x][point.y + 1];
  98. pointT.x = point.x;
  99. pointT.y = point.y + 1;
  100. if (matrix[point.x][point.y+1] != max_)
  101. myQueue.push(pointT);
  102. }
  103.  
  104. if (point.y > 0)
  105. if (matrix[point.x][point.y - 1] > matrix[point.x][point.y])
  106. {
  107. if (matrix[point.x][point.y] > oldMatrix[point.x][point.y - 1])
  108. matrix[point.x][point.y - 1] = matrix[point.x][point.y];
  109. else
  110. matrix[point.x][point.y - 1] = oldMatrix[point.x][point.y - 1];
  111. pointT.x = point.x;
  112. pointT.y = point.y - 1;
  113. if (matrix[point.x][point.y - 1] != max_)
  114. myQueue.push(pointT);
  115. }
  116. }
  117. void init()
  118. {
  119. Point point;
  120. for (int i = 1; i < n - 1; i++)
  121. for (int j = 1; j < m - 1; j++)
  122. matrix[i][j] = max_;
  123. for (int i = 0; i < n; i++)
  124. {
  125. matrix[i][0] = oldMatrix[i][0];
  126. matrix[i][m - 1] = oldMatrix[i][m - 1];
  127. point.init(i, 0);
  128. myQueue.push(point);
  129. point.y = m - 1;
  130. myQueue.push(point);
  131. }
  132.  
  133. for (int j = 1; j < m - 1; j++)
  134. {
  135. matrix[0][j] = oldMatrix[0][j];
  136. matrix[n - 1][j] = oldMatrix[n - 1][j];
  137. point.init(0, j);
  138. myQueue.push(point);
  139. point.x = n - 1;
  140. myQueue.push(point);
  141. }
  142.  
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement