Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <iomanip>
- #include <queue>
- using namespace std;
- struct Punct
- {
- int coordX, coordY;
- }start;
- queue <pair<int, int>> coada;
- const int di[] = { -1, 0, 1, 0 };
- const int dj[] = { 0, 1, 0, -1 };
- void Citire(int drumuri[][20], int& nrLinii, int& nrColoane, int& nrObstacole)
- {
- ifstream fin("alee.in");
- fin >> nrLinii >> nrColoane >> nrObstacole;
- for (int i = 0; i < nrObstacole; i++)
- {
- Punct obstacol = { 0 };
- fin >> obstacol.coordX >> obstacol.coordY;
- drumuri[obstacol.coordX][obstacol.coordY] = -1;
- }
- fin >> start.coordX >> start.coordY;
- drumuri[start.coordX][start.coordY] = 0;
- }
- bool verif(Punct urmator, int nrLinii, int nrColoane)
- {
- if (urmator.coordX < 0 || urmator.coordY < 0 || urmator.coordX >= nrLinii || urmator.coordY >= nrColoane)
- return false;
- return true;
- }
- void Lee(int drumuri[][20], int nrLinii, int nrColoane)
- {
- Punct curent = { 0 }, urmator = { 0 };
- coada.push(make_pair(start.coordX, start.coordY));
- while (!coada.empty())
- {
- curent.coordX = coada.front().first;
- curent.coordY = coada.front().second;
- for (int dir = 0; dir < 4; dir++)
- {
- urmator.coordX = curent.coordX + di[dir];
- urmator.coordY = curent.coordY + dj[dir];
- if (verif(urmator, nrLinii, nrColoane) && drumuri[urmator.coordX][urmator.coordY] == 0)
- {
- drumuri[urmator.coordX][urmator.coordY] = drumuri[curent.coordX][curent.coordY] + 1;
- coada.push(make_pair(urmator.coordX, urmator.coordY));
- }
- }
- coada.pop();
- }
- drumuri[start.coordX][start.coordY] = 0;
- return;
- }
- void Afisare(int drumuri[][20], int nrLinii, int nrColoane)
- {
- for (int i = 0; i < nrLinii; i++, cout << endl)
- for (int j = 0; j < nrColoane; j++)
- cout << setw(4) << drumuri[i][j];
- }
- int main()
- {
- int drumuri[20][20] = { 0 }, nrLinii, nrColoane, nrObstacole;
- Citire(drumuri, nrLinii, nrColoane, nrObstacole);
- Lee(drumuri, nrLinii, nrColoane);
- Afisare(drumuri, nrLinii, nrColoane);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement