Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<iomanip>
  6.  
  7. using namespace std;
  8.  
  9. struct Punct
  10. {
  11.     int lin, col;
  12. };
  13.  
  14. int m, n;
  15. int a[100][100], d[100][100];
  16.  
  17. int dlin[] = {-1, 0, 1,  0};
  18. int dcol[] = { 0, 1, 0, -1};
  19.  
  20. Punct coada[10000], pinit, pfinal;
  21.  
  22. bool verifPunctNou(Punct p)
  23. {
  24.     return a[p.lin][p.col] == 0 && p.lin >= 0 && p.lin < m && p.col >= 0 && p.col < n;
  25. }
  26.  
  27. bool verifPunctNouAfisareDrum(Punct p)
  28. {
  29.     return p.lin >= 0 && p.lin < m && p.col >= 0 && p.col < n;
  30. }
  31.  
  32.  
  33. bool verifPunctIesire(Punct p)
  34. {
  35.     if(p.lin == pinit.lin && p.col == pinit.col)
  36.         return false;
  37.  
  38.     return p.lin == 0 || p.lin == m-1 || p.col == 0 || p.col == n-1;
  39. }
  40.  
  41. int main()
  42. {
  43.     int prim, ultim;
  44.     Punct pcrt, pnou;
  45.  
  46.     ifstream fin("labirint.in");
  47.  
  48.     fin >> m >> n;
  49.     for(int i = 0; i < m; i++)
  50.         for(int j = 0; j < n; j++)
  51.         {
  52.             fin >> a[i][j];
  53.             if(a[i][j] == -1)
  54.             {
  55.                 pinit.lin = i;
  56.                 pinit.col = j;
  57.             }
  58.         }
  59.  
  60.     fin.close();
  61.  
  62.     prim = ultim = 0;
  63.     coada[0] = pinit;
  64.     a[pinit.lin][pinit.col] = 0;
  65.  
  66.     while(prim <= ultim)
  67.     {
  68.         pcrt = coada[prim++];
  69.  
  70.         if(verifPunctIesire(pcrt))
  71.         {
  72.             cout << "Punctul de iesire din labirint: (" << pcrt.lin << "," << pcrt.col << ")" << endl;
  73.             cout << "Lungimea minima a unui drum: " << a[pcrt.lin][pcrt.col] << endl;
  74.             pfinal = pcrt;
  75.             prim--;
  76.             break;
  77.         }
  78.  
  79.         for(int i = 0; i < 4; i++)
  80.         {
  81.             pnou.lin = pcrt.lin + dlin[i];
  82.             pnou.col = pcrt.col + dcol[i];
  83.  
  84.             if(verifPunctNou(pnou))
  85.             {
  86.                 coada[++ultim] = pnou;
  87.                 a[pnou.lin][pnou.col] = a[pcrt.lin][pcrt.col] + 1;
  88.             }
  89.         }
  90.     }
  91.  
  92.     a[pinit.lin][pinit.col] = -1;
  93.  
  94.     for(int i = 0; i < m; i++)
  95.     {
  96.         for(int j = 0; j < n; j++)
  97.             cout << a[i][j] << " ";
  98.         cout << endl;
  99.     }
  100.  
  101.     if(prim > ultim)
  102.         cout << "Nu exista niciun drum de iesire din labirint!" << endl;
  103.  
  104.     return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement