Advertisement
Guest User

Untitled

a guest
May 28th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.20 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <climits>
  4.  
  5. typedef struct Node Node;
  6.  
  7. using namespace std;
  8.  
  9. struct Node {
  10.     int index_x;
  11.     int index_y;
  12.     int value;
  13.     Node* next;
  14.     Node(int index_x_,int index_y_, int value_, Node* next_): index_x(index_x_),index_y(index_y_),value(value_),next(next_){};
  15.     Node(int index_x_,int index_y_, Node* next_): index_x(index_x_),index_y(index_y_),value(0),next(next_) {};
  16.     Node() {};
  17. };
  18.  
  19. void add_elem(Node*& matr,int index_x,int index_y,int value);
  20.  
  21. Node* init_matr(ifstream& file) {
  22.     int m, n;
  23.     int value;
  24.     file >> m >> n;
  25.     Node* matr = new Node(n,m,NULL);
  26.     for (int i=0;i<n;i++) {
  27.         for (int j=0;j<m;j++) {
  28.             file >> value;
  29.             if (value != 0)
  30.                 add_elem(matr,i,j,value);
  31.         }
  32.     }
  33.     return matr;
  34. }
  35.  
  36. void add_elem(Node*& matr,int index_x,int index_y,int value) {
  37.     Node* temp1 = matr;
  38.     while (temp1->next)
  39.         temp1 = temp1->next;
  40.     Node* temp = new Node(index_x,index_y,value,NULL);
  41.     temp1->next = temp;
  42. }
  43.  
  44.  
  45. int get_size_x(Node* matr) {
  46.     return matr->index_x;
  47. }
  48.  
  49. int get_size_y(Node* matr) {
  50.     return matr->index_y;
  51. }
  52.  
  53. void free_matr(Node* matr) {
  54.     Node* temp;
  55.     while ((temp = matr)) {
  56.         matr = matr->next;
  57.         delete temp;
  58.     }
  59. }
  60.  
  61. Node* min_elem_row(Node* matr,int index) {
  62.     Node* min_elem = new Node(-1,-1,NULL);
  63.     min_elem->value = INT_MAX;
  64.     Node* temp;
  65.     for (temp = matr->next; temp != NULL;temp = temp->next) {
  66.         if (temp->index_x == index && temp->value < min_elem->value)
  67.             min_elem = temp;
  68.     }
  69.     return min_elem;
  70. }
  71.  
  72. Node* max_elem_column(Node* matr,int index) {
  73.     Node* max_elem = new Node(-1,-1,NULL);
  74.     max_elem->value = INT_MIN;
  75.     Node* temp;
  76.     for (temp = matr->next; temp != NULL;temp = temp->next) {
  77.         if (temp->index_y == index && temp->value > max_elem->value)
  78.             max_elem = temp;
  79.     }
  80.     return max_elem;
  81. }
  82.  
  83. Node* find_elem(Node* matr,int index_x,int index_y) {
  84.     Node* temp;
  85.     for (temp = matr->next; temp != NULL; temp = temp->next) {
  86.         if (temp->index_x == index_x && temp->index_y == index_y) {
  87.             return temp;
  88.         }
  89.     }
  90.     return NULL;
  91. }
  92.  
  93. void output_matrix(Node* matr,ostream& file) {
  94.     int **matrix = new int* [matr->index_x];
  95.     for (int i=0;i<matr->index_x;i++) {
  96.         matrix[i] = new int [matr->index_y];
  97.     }
  98.  
  99.     for (int i=0;i<matr->index_x;i++)
  100.         for (int j=0;j<matr->index_y;j++)
  101.             matrix[i][j] = 0;
  102.     Node* temp;
  103.     for (temp = matr->next; temp != NULL;temp = temp->next) {
  104.         matrix[temp->index_x][temp->index_y] = temp->value;
  105.     }
  106.  
  107.     for (int i=0;i<matr->index_x;i++) {
  108.         for (int j = 0; j < matr->index_y; j++)
  109.             file << matrix[i][j];
  110.         file << endl;
  111.     }
  112.  
  113.     for (int i=0;i<matr->index_x;i++)
  114.         delete matrix[i];
  115.     delete [] matrix;
  116. }
  117.  
  118.  
  119.  
  120. int main() {
  121.     ifstream file("C:\\Users\\User\\CLionProjects\\Test\\test.txt");
  122.     Node* matr = init_matr(file);
  123.     file.close();
  124.     cout << "2 task" << endl;
  125.     for (int i=0;i<get_size_x(matr);i++) {
  126.         Node* min_elem = min_elem_row(matr,i);
  127.         if (min_elem->value != INT_MAX && max_elem_column(matr,min_elem->index_y)->value == min_elem->value) {
  128.             cout << "Number row: " << i;
  129.             cout << "; Element: " << min_elem->value;
  130.             cout << endl;
  131.         }
  132.     }
  133.     cout << "============" << endl;
  134.     cout << "3 task" << endl;
  135.     for (int i=0;i<get_size_x(matr);i++) {
  136.         Node* min_elem = min_elem_row(matr,i);
  137.         if (min_elem->value == INT_MAX)
  138.             continue;
  139.         Node* min_elem_after = find_elem(matr,min_elem->index_x,(min_elem->index_y+1)%get_size_y(matr));
  140.         if (min_elem_after != NULL)
  141.             min_elem_after->value = min_elem_after->index_y;
  142.         else {
  143.             add_elem(matr,min_elem->index_x,(min_elem->index_y+1)%get_size_y(matr),(min_elem->index_y+1)%get_size_y(matr));
  144.         }
  145.     }
  146.     cout << "============" << endl;
  147.     ofstream file_output("C:\\Users\\User\\CLionProjects\\Test\\test_out.txt");
  148.     output_matrix(matr,file_output);
  149.     file_output.close();
  150.     return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement