StoneHaos

7

Feb 1st, 2022
959
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4. #include <math.h>
  5.  
  6. typedef struct {
  7.     int x;
  8.     int y;
  9. } vec2;
  10. const int n = 13;
  11. const int m = 9;
  12. int matrix[n][m] = {
  13.     { 0,  5,  0, 11,  0, 12,  0,  5,  0},
  14.     {11,  0,  3,  0,  5,  0,  3,  0,  6},
  15.     { 0,  7,  0,  5,  0, 10,  0,  7,  0},
  16.     {11,  0, 13,  0, 11,  0, 17,  0,  7},
  17.     { 0, 10,  0,  5,  0,  9,  0,  9,  0},
  18.     { 1,  0,  3,  0,  8,  0,  8,  0,  7},
  19.     { 0,  5,  0,  6,  0,  4,  0, 14,  0},
  20.     { 2,  0,  9,  0, 11,  0, 13,  0,  8},
  21.     { 0,  7,  0,  4,  0,  8,  0,  6,  0},
  22.     { 8,  0,  4,  0,  8,  0, 11,  0,  9},
  23.     { 0,  8,  0, 11,  0, 13,  0, 10,  0},
  24.     {12,  0,  9,  0, 17,  0, 10,  0,  6},
  25.     { 0,  8,  0, 16,  0,  2,  0,  7,  0}
  26. };
  27.  
  28. int min(int a, int b) {
  29.     return ((a < b) ? a : b);
  30. }
  31.  
  32. int main(void) {
  33.     for (int i = 0; i < n; i += 2) {
  34.         for (int j = 0; j < m; j += 2) {
  35.             int mn = INT_MAX;
  36.             if (i > 0) {
  37.                 mn = min(mn, matrix[i - 2][j] + matrix[i - 1][j]);
  38.             }
  39.             if (j > 0) {
  40.                 mn = min(mn, matrix[i][j - 2] + matrix[i][j - 1]);
  41.             }
  42.             if (mn != INT_MAX)
  43.                 matrix[i][j] = mn;
  44.         }
  45.     }
  46.     vec2 way[(n + m) / 2];
  47.     int brd = 0;
  48.     int a = n - 1;
  49.     int b = m - 1;
  50.     while (a > 0 || b > 0) {
  51.         way[brd++] = {a, b};
  52.         int v = matrix[a][b];
  53.         if (a > 0 && v == (matrix[a - 2][b] + matrix[a - 1][b])) {
  54.             a -= 2;
  55.         }
  56.         else if (b != 0 && v == (matrix[a][b - 2] + matrix[a][b - 1])) {
  57.             b -= 2;
  58.         }
  59.     }
  60.     for (int i = 0; i < n; i ++) {
  61.         for (int j = 0; j < m; ++ j) {
  62.             printf("%2d ", matrix[i][j]);
  63.         }
  64.         printf("\n");
  65.     }
  66.     printf("\n");
  67.     printf("Min Way: %d\n", matrix[n - 1][m - 1]);
  68.     way[brd++] = {0, 0};
  69.     for (int i = brd - 1; i >= 0; -- i) {
  70.         printf("(%d, %d)", way[i].x, way[i].y);
  71.         if (i)
  72.             printf(" -> ");
  73.     }
  74.     printf("\n");
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment