Module: Tìm kiếm theo chiều sâu. DFS


Problem

5 /12


Đồ thị hai bên

Theory Click to read/hide

Biểu đồ hai phía
 
Biểu đồ hai phía - một biểu đồ có các đỉnh có thể được chia thành hai tập hợp sao cho mỗi cạnh kết nối các các đỉnh từ các tập hợp khác nhau.


Thông thường, trong ngữ cảnh của đồ thị hai phía, khái niệm màu sắc đỉnh được sử dụng. Việc chia một biểu đồ thành hai phần được gọi là tô màu các đỉnh của nó bằng hai màu khác nhau. Mỗi cạnh phải nối các đỉnh có màu khác nhau.

DFS
 

Thuật toán

Chúng ta bắt đầu vẽ từ một đỉnh tùy ý và tô màu tùy ý.
Khi đi dọc theo mỗi cạnh, hãy sơn đỉnh tiếp theo bằng màu đối diện.
Nếu trong khi duyệt qua các đỉnh lân cận, chúng ta tìm thấy một đỉnh đã được sơn cùng màu với đỉnh hiện tại, thì đó là một chu trình lẻ trong đồ thị, nghĩa là nó không phải là hai cạnh.

Problem

Một đồ thị được gọi là đồ thị hai phía nếu các đỉnh của nó có thể được tô bằng hai màu sao cho không có cạnh nối các đỉnh cùng màu (nghĩa là mỗi cạnh đi từ đỉnh có màu thứ nhất đến đỉnh có màu thứ 2) .
Cho một đồ thị. Cần phải kiểm tra xem nó có phải là lưỡng cực hay không và nếu có thì hãy tô màu các đỉnh của nó.
 
Đầu vào
Dòng đầu tiên chứa số N - số đỉnh của đồ thị (không vượt quá 100). Tiếp theo là ma trận kề - ma trận NxN gồm 0 và 1 (0 có nghĩa là không có cạnh, 1 có nghĩa là có mặt). Đồ thị vô hướng, không có vòng lặp.
 
Dấu ấn 
Trên dòng đầu tiên, in một trong các thông báo YES hoặc NO (tùy thuộc vào việc biểu đồ có phải là đồ thị hai bên hay không). Nếu câu trả lời là , ở dòng thứ hai in các số N - màu để tô màu các đỉnh: đối với màu đầu tiên, hãy sử dụng giá trị 1, đối với màu thứ hai - giá trị 2. Đỉnh đầu tiên phải có màu 1.
 
Ví dụ
<đầu>
# Đầu vào Đầu ra
1
3
0 1 1
1 0 1
1 1 0
KHÔNG
2
3
0 1 1
1 0 0
1 0 0
1 2 2