Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- struct nod
- {
- int x, y;
- nod *urm;
- };
- struct coada
- {
- nod *cap, *spate;
- };
- void init_coada(coada &c)
- {
- c.cap = NULL;
- c.spate = NULL;
- }
- void add_coada(coada &c, int i, int j)
- {
- nod *p = new nod;
- p->x = i;
- p->y = j;
- p->urm = NULL;
- if(c.cap == NULL)
- c.cap = c.spate = p;
- else
- {
- c.spate->urm = p;
- c.spate = p;
- }
- }
- void pop(coada &c, int &x, int &y)
- {
- if(c.cap->urm == NULL)
- c.cap = NULL;
- else
- {
- nod *p = c.cap;
- x = c.cap->x;
- y = c.cap->y;
- c.cap = c.cap->urm;
- delete p;
- }
- }
- void citire_matrice(int &m, int a[][50])
- {
- ifstream in("intrare.in");
- in >> m;
- for(int i = 1; i <= m; ++i)
- for(int j = 1; j <= m; ++j)
- in >> a[i][j];
- in.close();
- }
- void adiacenti(int m, int a[][50], coada &c, int i, int j, int eti)
- {
- int x, y;
- a[i][j] = eti;
- add_coada(c, i, j);
- while(c.cap != NULL)
- {
- i = c.cap->x;
- j = c.cap->y;
- if(a[i-1][j] == 1)
- {
- a[i-1][j] = eti;
- add_coada(c, i-1, j);
- }
- if(a[i+1][j] == 1)
- {
- a[i+1][j] = eti;
- add_coada(c, i+1, j);
- }
- if(a[i][j-1] == 1)
- {
- a[i][j-1] = eti;
- add_coada(c, i, j-1);
- }
- if(a[i][j+1] == 1)
- {
- a[i][j+1] = eti;
- add_coada(c, i, j+1);
- }
- pop(c, x, y);
- }
- }
- void bordare(int m, int a[][50])
- {
- for(int j = 1; j <= m; ++j)
- a[0][j] = a[m+1][j] = -1;
- for(int i = 1; i <= m; ++i)
- a[i][0] = a[i][m+1] = -1;
- }
- void etichetare(int m, int a[][50], coada c)
- {
- int eti = 2;
- for(int i = 1; i <= m; ++i)
- {
- for(int j = 1; j <= m; ++j)
- {
- if(a[i][j] == 1)
- {
- adiacenti(m, a, c, i, j, eti);
- ++eti;
- }
- }
- }
- }
- void afis_matrice(int m, int a[][50])
- {
- for(int i = 1; i <= m; ++i)
- {
- for(int j = 1; j <= m ;++j)
- cout << a[i][j] << ' ';
- cout << "\n";
- }
- cout << "\n";
- }
- int main()
- {
- int m, a[50][50];
- coada c;
- init_coada(c);
- citire_matrice(m, a);
- bordare(m, a);
- afis_matrice(m, a);
- etichetare(m, a, c);
- afis_matrice(m, a);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement