paranid5

2С

May 23rd, 2020
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. int main()
  4. {
  5.     int n = 0;
  6.     scanf("%d", &n);
  7.     int** matrix = malloc(n * sizeof(int*));
  8.     for (int i = 0; i < n; i++)
  9.         matrix[i] = malloc(n * sizeof(int));
  10.     for (int q = 0; q < n; q++)
  11.         for (int i = 0; i < n; i++)
  12.             scanf("%d", &matrix[q][i]);
  13.     /*ввели числа в матрицу*/
  14.     int** sum = malloc(n * sizeof(int*));
  15.     for (int i = 0; i < n; i++)
  16.         sum[i] = malloc(n * sizeof(int));
  17.     **sum = **matrix;
  18.     for (int i = 1; i < n; i++)
  19.         sum[0][i] = sum[0][i - 1] + matrix[0][i];
  20.     /*по строке*/
  21.     for (int q = 1; q < n; q++)
  22.         sum[q][0] = sum[q - 1][0] + matrix[q][0];
  23.     /*по столбцу*/
  24.     for (int j = 1; j < n; j++)
  25.     {
  26.         sum[j][j] = (sum[j - 1][j] < sum[j][j - 1] ? sum[j - 1][j] : sum[j][j - 1]) + matrix[j][j];
  27.         for (int i = j + 1; i < n; i++)
  28.             sum[j][i] = (sum[j - 1][i] < sum[j][i - 1] ? sum[j - 1][i] : sum[j][i - 1]) + matrix[j][i];
  29.         for (int q = j + 1; q < n; q++)
  30.             sum[q][j] = (sum[q - 1][j] < sum[q][j - 1] ? sum[q - 1][j] : sum[q][j - 1]) + matrix[q][j];
  31.     } /*заполнили таблицу минимальными суммами*/
  32.     char** graphics = malloc(n * sizeof(char*));
  33.     for (int i = 0; i < n; i++)
  34.         graphics[i] = malloc(n * sizeof(char));
  35.     for (int q = 0; q < n; q++)
  36.         for (int i = 0; i < n; i++)
  37.             graphics[q][i] = '-';
  38.     int x = n - 1, y = n - 1; /*восстанавливаем с конца; координаты начала*/
  39.     graphics[x][y] = '#';
  40.     graphics[0][0] = '#';
  41.     for (int h = 1; h < n + n - 2; h++) /*доходим до (0;0)*/
  42.         if (x == 0)
  43.             graphics[x][--y] = '#';
  44.         else if (y == 0)
  45.             graphics[--x][y] = '#';
  46.         else if (sum[x - 1][y] + matrix[x][y] == sum[x][y])
  47.             graphics[--x][y] = '#';
  48.         else
  49.             graphics[x][--y] = '#';
  50.     for (int t = 0; t < n; t++)
  51.     {
  52.         for (int z = 0; z < n; z++)
  53.             printf("%c", graphics[t][z]);
  54.         puts("");
  55.     }
  56.     free(matrix);
  57.     free(sum);
  58.     free(graphics);
  59.     return 0;
  60. }
Add Comment
Please, Sign In to add comment