Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <climits>
- typedef struct Node Node;
- using namespace std;
- struct Node {
- int index_x;
- int index_y;
- int value;
- Node* next;
- Node(int index_x_,int index_y_, int value_, Node* next_): index_x(index_x_),index_y(index_y_),value(value_),next(next_){};
- Node(int index_x_,int index_y_, Node* next_): index_x(index_x_),index_y(index_y_),value(0),next(next_) {};
- Node() {};
- };
- void add_elem(Node*& matr,int index_x,int index_y,int value);
- Node* init_matr(ifstream& file) {
- int m, n;
- int value;
- file >> m >> n;
- Node* matr = new Node(n,m,NULL);
- for (int i=0;i<n;i++) {
- for (int j=0;j<m;j++) {
- file >> value;
- if (value != 0)
- add_elem(matr,i,j,value);
- }
- }
- return matr;
- }
- void add_elem(Node*& matr,int index_x,int index_y,int value) {
- Node* temp1 = matr;
- while (temp1->next)
- temp1 = temp1->next;
- Node* temp = new Node(index_x,index_y,value,NULL);
- temp1->next = temp;
- }
- int get_size_x(Node* matr) {
- return matr->index_x;
- }
- int get_size_y(Node* matr) {
- return matr->index_y;
- }
- void free_matr(Node* matr) {
- Node* temp;
- while ((temp = matr)) {
- matr = matr->next;
- delete temp;
- }
- }
- Node* min_elem_row(Node* matr,int index) {
- Node* min_elem = new Node(-1,-1,NULL);
- min_elem->value = INT_MAX;
- Node* temp;
- for (temp = matr->next; temp != NULL;temp = temp->next) {
- if (temp->index_x == index && temp->value < min_elem->value)
- min_elem = temp;
- }
- return min_elem;
- }
- Node* max_elem_column(Node* matr,int index) {
- Node* max_elem = new Node(-1,-1,NULL);
- max_elem->value = INT_MIN;
- Node* temp;
- for (temp = matr->next; temp != NULL;temp = temp->next) {
- if (temp->index_y == index && temp->value > max_elem->value)
- max_elem = temp;
- }
- return max_elem;
- }
- Node* find_elem(Node* matr,int index_x,int index_y) {
- Node* temp;
- for (temp = matr->next; temp != NULL; temp = temp->next) {
- if (temp->index_x == index_x && temp->index_y == index_y) {
- return temp;
- }
- }
- return NULL;
- }
- void output_matrix(Node* matr,ostream& file) {
- int **matrix = new int* [matr->index_x];
- for (int i=0;i<matr->index_x;i++) {
- matrix[i] = new int [matr->index_y];
- }
- for (int i=0;i<matr->index_x;i++)
- for (int j=0;j<matr->index_y;j++)
- matrix[i][j] = 0;
- Node* temp;
- for (temp = matr->next; temp != NULL;temp = temp->next) {
- matrix[temp->index_x][temp->index_y] = temp->value;
- }
- for (int i=0;i<matr->index_x;i++) {
- for (int j = 0; j < matr->index_y; j++)
- file << matrix[i][j];
- file << endl;
- }
- for (int i=0;i<matr->index_x;i++)
- delete matrix[i];
- delete [] matrix;
- }
- int main() {
- ifstream file("C:\\Users\\User\\CLionProjects\\Test\\test.txt");
- Node* matr = init_matr(file);
- file.close();
- cout << "2 task" << endl;
- for (int i=0;i<get_size_x(matr);i++) {
- Node* min_elem = min_elem_row(matr,i);
- if (min_elem->value != INT_MAX && max_elem_column(matr,min_elem->index_y)->value == min_elem->value) {
- cout << "Number row: " << i;
- cout << "; Element: " << min_elem->value;
- cout << endl;
- }
- }
- cout << "============" << endl;
- cout << "3 task" << endl;
- for (int i=0;i<get_size_x(matr);i++) {
- Node* min_elem = min_elem_row(matr,i);
- if (min_elem->value == INT_MAX)
- continue;
- Node* min_elem_after = find_elem(matr,min_elem->index_x,(min_elem->index_y+1)%get_size_y(matr));
- if (min_elem_after != NULL)
- min_elem_after->value = min_elem_after->index_y;
- else {
- 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));
- }
- }
- cout << "============" << endl;
- ofstream file_output("C:\\Users\\User\\CLionProjects\\Test\\test_out.txt");
- output_matrix(matr,file_output);
- file_output.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement