fork download
  1. uses Math;
  2. const
  3. SIZE = 100;
  4. var
  5. mtx : array [0..SIZE, 0..SIZE] of Integer;
  6. function Value(x, y : Integer) : Integer;
  7. var
  8. cnt : Integer;
  9.  
  10. begin
  11. cnt := 0;
  12.  
  13. if mtx[x-1, y] = 1 then begin
  14. mtx[x-1, y] := 0;
  15. Inc(cnt, Value(x-1, y)+1)
  16. end;
  17.  
  18. if mtx[x+1, y] = 1 then begin
  19. mtx[x+1, y] := 0;
  20. Inc(cnt, Value(x+1, y)+1)
  21. end;
  22.  
  23. if mtx[x, y-1] = 1 then begin
  24. mtx[x, y-1] := 0;
  25. Inc(cnt, Value(x, y-1)+1)
  26. end;
  27.  
  28. if mtx[x, y+1] = 1 then begin
  29. mtx[x, y+1] := 0;
  30. Inc(cnt, Value(x, y+1)+1)
  31. end;
  32.  
  33. Value := cnt
  34. end;
  35.  
  36. var
  37. a : array [0..SIZE] of Integer;
  38. n, m, i, j : Integer;
  39.  
  40. begin
  41. ReadLn(n, m);
  42.  
  43.  
  44. for i := 1 to SIZE do
  45. a[i] := 0;
  46.  
  47. for i := 1 to n do
  48. for j := 1 to m do
  49. Read(mtx[i,j]);
  50.  
  51. for i := 0 to n+1 do begin
  52. mtx[i, 0] := -1; mtx[0, i] := -1;
  53. mtx[i, n+1] := -1; mtx[n+1, i] := -1
  54. end;
  55.  
  56. for i := 1 to n do
  57. for j := 1 to m do
  58. if mtx[i, j] = 1 then begin
  59. mtx[i, j] := 0;
  60. Inc(a[Value(i, j)+1]);
  61. end;
  62.  
  63. for i := 1 to Max(n, m) do
  64. if a[i] <> 0 then
  65. WriteLn(i, ' ', a[i])
  66. end.
  67.  
Success #stdin #stdout 0s 420KB
stdin
5 5 
1 0 1 0 0 
0 0 1 1 0 
1 0 0 0 0 
1 0 0 0 1 
1 0 1 0 1  
stdout
1 2
2 1
3 2