Advertisement
nikitta_e

zad4_optimisation

Jan 9th, 2024 (edited)
858
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | Science | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void create2Matrix(int** mtx,int** mtxWay,int rows)
  5. {
  6.     for (int i = 0; i < rows; i++)
  7.     {
  8.         int colls;
  9.         cin >> colls;
  10.  
  11.         mtx[i] = new int[colls + 1] {0};
  12.         mtx[i][0] = colls;
  13.         mtxWay[i] = new int[colls + 1] {0};
  14.         mtxWay[i][0] = colls;
  15.         for (int j = 1; j < colls + 1; j++)
  16.         {
  17.             cin >> mtx[i][j];
  18.             mtxWay[i][j]=0;
  19.         }
  20.     }
  21. }
  22.  
  23. void deleteMatrix(int** matrix, int rows)
  24. {
  25.     for (int i = 0; i < rows; i++)
  26.     {
  27.         delete[] matrix[i];
  28.     }
  29.     delete[] matrix;
  30.  
  31. }
  32.  
  33. void printMatrix(int** matrix, int rows)
  34. {
  35.  
  36.     for (int i = 0; i < rows; i++)
  37.     {
  38.         int sizeOfRow = matrix[i][0];
  39.         for (int j = 1; j < sizeOfRow + 1; j++)
  40.         {
  41.             cout << matrix[i][j] << " ";
  42.         }
  43.         cout << endl;
  44.     }
  45. }
  46.  
  47. int findWay(int** matrix,int **mtxWay, int rows, int x, int y)
  48. {
  49.     int way=1,maxLen=1;
  50.  
  51.     for (int i = x - 1; i <= x + 1; i++)
  52.     {
  53.         if (i < 0 || i >= rows)
  54.         {
  55.             continue;
  56.         }
  57.  
  58.         for (int j = y - 1; j <= y + 1; j++)
  59.         {
  60.             if (j <1 || j > matrix[i][0])
  61.             {
  62.                 continue;
  63.             }
  64.  
  65.             if (matrix[i][j]  > matrix[x][y] )
  66.             {
  67.                 if(mtxWay[i][j]>0) way=1+mtxWay[i][j];
  68.                 else  way=1+findWay(matrix,mtxWay,rows,i,j);
  69.  
  70.                 if(way>maxLen)maxLen=way;
  71.             }
  72.         }
  73.     }
  74.     mtxWay[x][y]=maxLen;
  75.     return maxLen;
  76.  
  77. }
  78.  
  79. unsigned int findLongestLine2(int** matrix,int** mtxWay, int rows)
  80. {
  81.     int maxi=0;
  82.     for (int i = 0; i < rows; i++)
  83.     {
  84.         int sizeOfRow = matrix[i][0];
  85.         for (int j = 1; j < sizeOfRow + 1; j++)
  86.         {
  87.             int br=findWay(matrix,mtxWay,rows,i,j);
  88.             if(br>maxi)maxi=br;
  89.         }
  90.     }
  91.     return maxi;
  92. }
  93.  
  94.  
  95. int main()
  96. {
  97.     int rows;
  98.     cin >> rows;
  99.     int length = 1, maxLength = 0;
  100.  
  101.     int **mtx=new int*[rows];
  102.     int**mtxWay=new int*[rows];//тази матрица е за да запазим път от даден елемент и да е то изчисляваме втори път
  103.     create2Matrix(mtx,mtxWay,rows);
  104.  
  105.     //  printMatrix(mtx, rows);
  106.     //  printMatrix(mtxWay, rows);
  107.     cout << findLongestLine2(mtx,mtxWay, rows)<<endl;
  108.  
  109.     //printMatrix(mtxWay, rows);
  110.     deleteMatrix(mtx, rows);
  111.     deleteMatrix(mtxWay, rows);
  112.     /*
  113.  
  114.     4
  115.     3 4 8 9
  116.     2 2 10
  117.     5 3 11 7 0 4
  118.     3 1 3 12
  119.  
  120.     */
  121. }
  122.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement