Phân vùng ảnh
Toto học môn xử lý ảnh số và được học về phân vùng ảnh. Cho một ảnh nhị phân là một ma trận cỡ \(n*m\) chứa các số \(0\) và số \(1\) thể hiện cho mầu trắng và màu đen. Màu trắng thể hiện cho đối tượng ảnh còn màu đen thể hiện cho nền.
Một vùng trong ảnh đen trắng là một vùng chứa toàn những ô trắng (số \(0\)) sao cho 2 ô bất kỳ trong vùng này liên thông với nhau theo láng giềng 8 và 2 ô ở hai vùng khác nhau thì không tồn tại đường đi nào liên thông láng giềng 8 với nhau theo.
Toto được thầy giao cho lập trình tìm các vùng trong một ảnh cho trước, nhưng chưa biết lập trình thế nào bạn hãy giúp Toto nhé
Input
Dòng đầu chứa hai số \(n, m\) là kích thước của ma trận ảnh \((1 \le n,m \le 200)\)
Tiếp theo là ma trận kích thước \(n*m\) chứa các số \(0\) và \(1\)
Output
Dòng đầu chứa số vùng của ảnh
Dòng tiếp theo chứa diện tích (số ô) từng vùng được sắp xếp tăng dần
Ví dụ
Input
24 23
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1
1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1
1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 0 0 0 1 1 1
1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1
1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Output
4
14 16 16 21
Comments