yoyoboyss

Untitled

Feb 14th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int NMAX = 105;
  5.  
  6. ifstream fin("insule.in");
  7. ofstream fout("insule.out");
  8.  
  9. int dx[4] = {0, 0, -1, 1};
  10. int dy[4] = {-1, 1, 0, 0};
  11. queue < pair <int, int> > Q;
  12.  
  13. int H[NMAX][NMAX], Par[NMAX][NMAX];
  14.  
  15. int M, N;
  16. int nr_insule[4], nr, Lg=INT_MAX;
  17.  
  18. /*void afisare_matrice(int matrice[NMAX][NMAX]){
  19. cout << endl;
  20. for(int i=0; i<N; i++){
  21. for(int j=0; j<M; j++){
  22. cout << matrice[i][j];
  23. if(matrice[i][j]>=10 || matrice[i][j]<0)
  24. cout << ' ';
  25. else
  26. cout << " ";
  27. }
  28. cout << endl;
  29. }
  30. }*/
  31.  
  32. int read(){
  33. fin >> N >> M;
  34. for(int i = 0; i < N; i++)
  35. for(int j = 0; j < M; j++){
  36. char c;
  37. fin >> c;
  38. H[i][j] = c - '0';
  39. }
  40. }
  41.  
  42. bool OK(int i, int j){
  43. if( i < 0 || j < 0 || i > N-1 || j > M-1)
  44. return false;
  45. return true;
  46. }
  47.  
  48. int fil(int x, int y){
  49. Par[x][y]=nr;
  50. for(int d = 0; d < 4; d++){
  51. int i_1 = x + dx[d];
  52. int j_1 = y + dy[d];
  53. int cont=0;
  54. if((H[x][y] == 1 || H[x][y] == 2) && H[i_1][j_1] == 0){
  55. //cout << endl;
  56. int i = i_1;
  57. int j = j_1;
  58. while(OK(i, j)){
  59. if((H[x][y] == 1 && H[i][j] == 2) || (H[x][y] == 2 && H[i][j] == 1)){
  60. Lg=min(cont, Lg);
  61. //cout << i << ' ' << j << " -> " << cont <<endl;
  62. i = -10;
  63. } else if(H[i][j] == 3 || H[i][j] == H[x][y]) {
  64. i = -10;
  65. }
  66. cont++;
  67. //cout << i << ' ' << j << "\n";
  68. i = i + dx[d];
  69. j = j + dy[d];
  70. }
  71. }
  72. if(OK(i_1, j_1) && !Par[i_1][j_1] && H[i_1][j_1] && H[x][y]==H[i_1][j_1]){
  73. Par[i_1][j_1]=nr;
  74. fil(i_1, j_1);
  75. }
  76. }
  77. }
  78.  
  79. int main(){
  80. read();
  81. for(int i = 0; i < N; i++){
  82. for(int j = 0; j < M; j++){
  83. if(!Par[i][j] && H[i][j]){
  84. nr++;
  85. fil(i, j);
  86. nr_insule[H[i][j]]++;
  87. }
  88. }
  89. }
  90. for(int i = 1; i < 4; i++){
  91. fout << nr_insule[i] << ' ';
  92. }
  93. fout << Lg;
  94. //afisare_matrice(Par);
  95. return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment