Advertisement
PedalaVasile

maimuta

Oct 28th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("maimuta.in");
  6. ofstream fout("maimuta.out");
  7.  
  8. int maxim = 0;
  9.  
  10. int n, m, mi, mj;
  11.  
  12. int a[30][30];
  13. char rez[500];
  14. bitset < 30 > viz[30];
  15.  
  16. void BT(int i, int j, int c = 0)
  17. {
  18.     cout << i << ' ' << j << ' ' << c << '\n';
  19.     if (i == 1 || j == 1)
  20.     {
  21.         if (c < maxim)
  22.         {
  23.             fout.close();
  24.             fout.open("maimuta.out");
  25.  
  26.             while (i < c)
  27.             {
  28.                 int a = 0;
  29.                 char car = rez[i];
  30.  
  31.                 while (i < c && rez[i] == car)
  32.                 {
  33.                     i++;
  34.                     a++;
  35.                 }
  36.  
  37.                 fout << a << car;
  38.             }
  39.  
  40.             maxim = c;
  41.         }
  42.         else if (c == maxim)
  43.         {
  44.             while (i < c)
  45.             {
  46.                 int a = 0;
  47.                 char car = rez[i];
  48.  
  49.                 while (i < c && rez[i] == car)
  50.                 {
  51.                     i++;
  52.                     a++;
  53.                 }
  54.  
  55.                 fout << a << car;
  56.             }
  57.         }
  58.     }
  59.     else
  60.     {
  61.         if (!a[i - 1][j] && !viz[i - 1][j] && i > 1)
  62.         {
  63.             viz[i - 1][j] = 1;
  64.             rez[c] = 'N';
  65.             BT(i - 1, j, c + 1);
  66.             viz[i - 1][j] = 0;
  67.         }
  68.  
  69.         if (!a[i][j + 1] && !viz[i - 1][j] && j < m)
  70.         {
  71.             viz[i - 1][j] = 1;
  72.             rez[c] = 'E';
  73.             BT(i, j + 1, c + 1);
  74.             viz[i][j + 1] = 0;
  75.         }
  76.  
  77.         if (!a[i + 1][j] && !viz[i + 1][j] && i < n)
  78.         {
  79.             viz[i + 1][j] = 1;
  80.             rez[c] = 'S';
  81.             BT(i + 1, j, c + 1);
  82.             viz[i + 1][j] = 0;
  83.         }
  84.  
  85.         if (!a[i][j - 1] && !viz[i][j - 1] && j > 0)
  86.         {
  87.             viz[i][j - 1] = 1;
  88.             rez[c] = 'V';
  89.             BT(i, j - 1, c + 1);
  90.             viz[i][j - 1] = 0;
  91.         }
  92.     }
  93. }
  94. int main()
  95. {
  96.     fin >> n >> m >> mi >> mj;
  97.  
  98.     for (int i = 1; i <= n; i++)
  99.         for (int j = 1; j <= m; j++)
  100.             fin >> a[i][j];
  101.  
  102.     viz[mi][mj] = 1;
  103.     BT(mi, mj);
  104.  
  105.  
  106.     fin.close();
  107.     fout.close();
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement