Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- #include <fstream>
- using namespace std;
- struct Point {
- int x, y;
- Point() {};
- void init(int a, int b)
- {
- x = a;
- y = b;
- }
- };
- void init();
- void func(Point p);
- queue<Point> myQueue;
- int n = 3, m = 3;
- int** oldMatrix;
- int** matrix;
- int max_;
- int main()
- {
- Point point;
- ifstream fin("in.txt"); // открыли файл для чтения
- fin >> n;
- fin >> m;
- max_ = -1;
- oldMatrix = new int*[n];
- matrix = new int*[n];
- for (int i = 0; i < n; i++)
- {
- oldMatrix[i] = new int[m];
- matrix[i] = new int[m];
- }
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- {
- fin >> oldMatrix[i][j];
- if (oldMatrix[i][j] > max_)
- max_ = oldMatrix[i][j];
- }
- fin.close();
- init();
- while (myQueue.size() != 0)
- {
- point = myQueue.front();
- myQueue.pop();
- if(matrix[point.x][point.y]!= max_)
- func(point);
- }
- int res = 0;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < m; j++)
- res += (matrix[i][j] - oldMatrix[i][j]);
- ofstream fout("out.txt"); // создаём объект класса ofstream для записи и связываем его с файлом cppstudio.txt
- fout << res;
- fout.close(); // закрываем файл
- return 0;
- }
- void func(Point point)
- {
- Point pointT;
- if (point.x > 0)
- if (matrix[point.x - 1][point.y] > matrix[point.x][point.y])
- {
- if (matrix[point.x][point.y] > oldMatrix[point.x - 1][point.y])
- matrix[point.x - 1][point.y] = matrix[point.x][point.y];
- else
- matrix[point.x - 1][point.y] = oldMatrix[point.x - 1][point.y];
- pointT.x = point.x - 1;
- pointT.y = point.y;
- if(matrix[point.x - 1][point.y]!=max_)
- myQueue.push(pointT);
- }
- if (point.x < n - 1)
- if (matrix[point.x + 1][point.y] > matrix[point.x][point.y])
- {
- if (matrix[point.x][point.y] > oldMatrix[point.x + 1][point.y])
- matrix[point.x + 1][point.y] = matrix[point.x][point.y];
- else
- matrix[point.x + 1][point.y] = oldMatrix[point.x + 1][point.y];
- pointT.x = point.x + 1;
- pointT.y = point.y;
- if (matrix[point.x + 1][point.y] != max_)
- myQueue.push(pointT);
- }
- if (point.y < m - 1)
- if (matrix[point.x][point.y + 1] > matrix[point.x][point.y])
- {
- if (matrix[point.x][point.y] > oldMatrix[point.x][point.y + 1])
- matrix[point.x][point.y + 1] = matrix[point.x][point.y];
- else
- matrix[point.x][point.y + 1] = oldMatrix[point.x][point.y + 1];
- pointT.x = point.x;
- pointT.y = point.y + 1;
- if (matrix[point.x][point.y+1] != max_)
- myQueue.push(pointT);
- }
- if (point.y > 0)
- if (matrix[point.x][point.y - 1] > matrix[point.x][point.y])
- {
- if (matrix[point.x][point.y] > oldMatrix[point.x][point.y - 1])
- matrix[point.x][point.y - 1] = matrix[point.x][point.y];
- else
- matrix[point.x][point.y - 1] = oldMatrix[point.x][point.y - 1];
- pointT.x = point.x;
- pointT.y = point.y - 1;
- if (matrix[point.x][point.y - 1] != max_)
- myQueue.push(pointT);
- }
- }
- void init()
- {
- Point point;
- for (int i = 1; i < n - 1; i++)
- for (int j = 1; j < m - 1; j++)
- matrix[i][j] = max_;
- for (int i = 0; i < n; i++)
- {
- matrix[i][0] = oldMatrix[i][0];
- matrix[i][m - 1] = oldMatrix[i][m - 1];
- point.init(i, 0);
- myQueue.push(point);
- point.y = m - 1;
- myQueue.push(point);
- }
- for (int j = 1; j < m - 1; j++)
- {
- matrix[0][j] = oldMatrix[0][j];
- matrix[n - 1][j] = oldMatrix[n - 1][j];
- point.init(0, j);
- myQueue.push(point);
- point.x = n - 1;
- myQueue.push(point);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement