Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int NMAX = 105;
- ifstream fin("insule.in");
- ofstream fout("insule.out");
- int dx[4] = {0, 0, -1, 1};
- int dy[4] = {-1, 1, 0, 0};
- queue < pair <int, int> > Q;
- int H[NMAX][NMAX], Par[NMAX][NMAX];
- int M, N;
- int nr_insule[4], nr, Lg=INT_MAX;
- /*void afisare_matrice(int matrice[NMAX][NMAX]){
- cout << endl;
- for(int i=0; i<N; i++){
- for(int j=0; j<M; j++){
- cout << matrice[i][j];
- if(matrice[i][j]>=10 || matrice[i][j]<0)
- cout << ' ';
- else
- cout << " ";
- }
- cout << endl;
- }
- }*/
- int read(){
- fin >> N >> M;
- for(int i = 0; i < N; i++)
- for(int j = 0; j < M; j++){
- char c;
- fin >> c;
- H[i][j] = c - '0';
- }
- }
- bool OK(int i, int j){
- if( i < 0 || j < 0 || i > N-1 || j > M-1)
- return false;
- return true;
- }
- int fil(int x, int y){
- Par[x][y]=nr;
- for(int d = 0; d < 4; d++){
- int i_1 = x + dx[d];
- int j_1 = y + dy[d];
- int cont=0;
- if((H[x][y] == 1 || H[x][y] == 2) && H[i_1][j_1] == 0){
- //cout << endl;
- int i = i_1;
- int j = j_1;
- while(OK(i, j)){
- if((H[x][y] == 1 && H[i][j] == 2) || (H[x][y] == 2 && H[i][j] == 1)){
- Lg=min(cont, Lg);
- //cout << i << ' ' << j << " -> " << cont <<endl;
- i = -10;
- } else if(H[i][j] == 3 || H[i][j] == H[x][y]) {
- i = -10;
- }
- cont++;
- //cout << i << ' ' << j << "\n";
- i = i + dx[d];
- j = j + dy[d];
- }
- }
- if(OK(i_1, j_1) && !Par[i_1][j_1] && H[i_1][j_1] && H[x][y]==H[i_1][j_1]){
- Par[i_1][j_1]=nr;
- fil(i_1, j_1);
- }
- }
- }
- int main(){
- read();
- for(int i = 0; i < N; i++){
- for(int j = 0; j < M; j++){
- if(!Par[i][j] && H[i][j]){
- nr++;
- fil(i, j);
- nr_insule[H[i][j]]++;
- }
- }
- }
- for(int i = 1; i < 4; i++){
- fout << nr_insule[i] << ' ';
- }
- fout << Lg;
- //afisare_matrice(Par);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment