Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<cstring>
- #include<cstdlib>
- #include<iomanip>
- using namespace std;
- struct Punct
- {
- int lin, col;
- };
- int m, n;
- int a[100][100], d[100][100];
- int dlin[] = {-1, 0, 1, 0};
- int dcol[] = { 0, 1, 0, -1};
- Punct coada[10000], pinit, pfinal;
- bool verifPunctNou(Punct p)
- {
- return a[p.lin][p.col] == 0 && p.lin >= 0 && p.lin < m && p.col >= 0 && p.col < n;
- }
- bool verifPunctNouAfisareDrum(Punct p)
- {
- return p.lin >= 0 && p.lin < m && p.col >= 0 && p.col < n;
- }
- bool verifPunctIesire(Punct p)
- {
- if(p.lin == pinit.lin && p.col == pinit.col)
- return false;
- return p.lin == 0 || p.lin == m-1 || p.col == 0 || p.col == n-1;
- }
- int main()
- {
- int prim, ultim;
- Punct pcrt, pnou;
- ifstream fin("labirint.in");
- fin >> m >> n;
- for(int i = 0; i < m; i++)
- for(int j = 0; j < n; j++)
- {
- fin >> a[i][j];
- if(a[i][j] == -1)
- {
- pinit.lin = i;
- pinit.col = j;
- }
- }
- fin.close();
- prim = ultim = 0;
- coada[0] = pinit;
- a[pinit.lin][pinit.col] = 0;
- while(prim <= ultim)
- {
- pcrt = coada[prim++];
- if(verifPunctIesire(pcrt))
- {
- cout << "Punctul de iesire din labirint: (" << pcrt.lin << "," << pcrt.col << ")" << endl;
- cout << "Lungimea minima a unui drum: " << a[pcrt.lin][pcrt.col] << endl;
- pfinal = pcrt;
- prim--;
- break;
- }
- for(int i = 0; i < 4; i++)
- {
- pnou.lin = pcrt.lin + dlin[i];
- pnou.col = pcrt.col + dcol[i];
- if(verifPunctNou(pnou))
- {
- coada[++ultim] = pnou;
- a[pnou.lin][pnou.col] = a[pcrt.lin][pcrt.col] + 1;
- }
- }
- }
- a[pinit.lin][pinit.col] = -1;
- for(int i = 0; i < m; i++)
- {
- for(int j = 0; j < n; j++)
- cout << a[i][j] << " ";
- cout << endl;
- }
- if(prim > ultim)
- cout << "Nu exista niciun drum de iesire din labirint!" << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement