Advertisement
szmaragdowooki

Untitled

May 22nd, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. #include <cstdio>
  2. #include <queue>
  3. // #define DEBUG 1
  4.  
  5. using namespace std;
  6.  
  7. struct edge
  8. {
  9.     int u, v;
  10.     int s;
  11. };
  12.  
  13. struct place {
  14.     int depth;
  15.     bool visited;
  16. }
  17.  
  18. bool operator< (edge a, edge b)
  19. {
  20.     if (a.s < b.s)
  21.         return true;
  22.     else
  23.         return false;
  24. }
  25.  
  26. void print_map(int **map, int n) {
  27.     #ifdef DEBUG
  28.     for (int i = 0; i < n; i++) {
  29.         for (int j = 0; j < n; j++) {
  30.             printf("%d ", map[i][j]);
  31.         }
  32.         printf("\n");
  33.     }    
  34.     printf("\n");
  35.     #endif
  36. }
  37.  
  38. int find (int x, int* parent)
  39. {
  40.     /**********************
  41.     * PLACE FOR YOUR CODE *
  42.     **********************/
  43. }
  44.  
  45. void unia (int x, int y, int* parent, int* rank)
  46. {
  47.     /**********************
  48.     * PLACE FOR YOUR CODE *
  49.     **********************/
  50. }
  51.  
  52. void inArray(int a, int b, int n) {
  53.     return a >= 0 && a < n && b >= 0 && b < n;
  54. }
  55.  
  56. int draught_calculator(int **map, bool** visited, int x, int y, int n, int k, bool &reached) {
  57.     if (x == 0 && y == 0) {
  58.         for (int i = 0; i < n; i++) {
  59.             visited[i] = new bool[n];
  60.             for (int j = 0; j < n; j++) visited[i][j] = false;
  61.         }
  62.     }
  63.     if (x == n - 1 && y == n - 1) {
  64.         reached = true;
  65.         return k;
  66.     }
  67.     visited[x][y] = true;
  68.     for (int i = 1; i >= -1; i--) {
  69.         for (int j = 1; j >= -1; j--) {
  70.             if (abs(i) == abs(j)) continue;
  71.             if (inArray(x + i, y + j, n) && !visited[x + i][y + j] && map[x + i][y + j] > k) {
  72.                 draught_calculator(map, visited, x + i, y + j, n, k);
  73.             }
  74.         }
  75.     }
  76.     if (x == 0 && y == 0) {
  77.         for (int i = 0; i < n; i++) delete[] visited[i];
  78.         delete[] visited;
  79.         return reached ? k : draught_calculator(map, NULL, 0, 0, n, k - 1, reached);
  80.     }
  81. }
  82.  
  83. int main ()
  84. {
  85.     int Z;
  86.     scanf("%d", &Z);
  87.     while(Z--)
  88.     {
  89.         int n, k;
  90.         scanf ("%d %d", &n, &k);
  91.         int **map = new int*[n];
  92.         for (int i = 0; i < n; i++)
  93.             map[i] = new int[n];
  94.  
  95.         for (int i = 0; i < n; i++) {
  96.             for (int j = 0; j < n; j++) {
  97.                 scanf("%d", &map[i][j]);
  98.             }
  99.         }
  100.  
  101.         print_map(map, n);
  102.        
  103.         bool reached = false;
  104.         int result = draught_calculator(map, NULL, 0, 0, n, k, reached);
  105.  
  106.         printf ("%d\n", result);
  107.  
  108.         for (int i = 0; i < n; i++)
  109.             delete[] map[i];
  110.         delete[] map;
  111.  
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement