1. Một số bài tập về đồ thị
Bài 1: QUẦN ĐẢO Tên chương trình: QUANDAO.PAS
Trên 1 vùng biển có N đảo được đánh số từ 1 đến N. Khả năng đi lại giữa các đảo được cho
bởi ma trận NxN. Trong đó A[i, i] =1; A[i, j] = A[j, i] = 1 nếu có đường đi từ i đến j, A[i, j] = 0
nếu không có đường đi.
Hai đảo i và j được gọi là cùng một quần đảo nếu có đường đi từ i đến j.
Yêu cầu: Hãy xác định quần đảo có chứa đảo K trên biển.
Dữ liệu vào: Cho trong file văn bản QUANDAO.INP có cấu trúc như sau:
- Dòng đầu tiên ghi số N và K (2 ≤ N, K ≤100).
- N dòng tiếp theo là ma trận NxN.
Dữ liệu ra: Ghi vào file văn bản QUANDAO.OUT gồm 1 dòng chứa quần đảo tìm được, mỗi
đảo cách nhau 1 dấu cách, được sắp xếp từ nhỏ đến lớn.
Ví dụ:
QUANDAO.INP QUANDAO.OUT
5 4 2 4 5
1 0 1 0 0
0 1 0 1 1
1 0 1 0 0
0 1 0 1 0
0 1 0 0 1
Bài 2: TÌM ĐƯỜNG ĐI Tên chương trình: DUONGDI.PAS
Một cuộc đua xe đạp được tổ chức giữa N thành phố, được đánh số từ 1 đến N. Có M con
đường 1 chiều nối liền giữa các thành phố này. Cuộc đua khởi hành tại thành phố 1 và kết thúc ở
thành phố 2.
Yêu cầu: Hãy cho biết có bao nhiêu tuyến đường khác nhau để đi từ thành phố 1 đến thành phố
2? Hai tuyến đường được xem là khác nhau nếu chúng không sử dụng cùng các con đường.
Dữ liệu vào: Vào từ file văn bản DUONGDI.INP gồm :
- Dòng đầu chứa 2 số nguyên N và M (1 ≤ N ≤ 10 000, 1 ≤ M ≤ 100 000), số thành phố và
số con đường.
- Mỗi dòng trong M dòng tiếp theo chứa 2 số nguyên khác nhau A và B, biểu diễn con
đường giữa thành phố A và B (các số cách nhau ít nhất một dấu cách). Các thành phố có
thể được nối liền bởi hơn 1 con đường.
Dữ liệu ra: Ghi ra file văn bản DUONGDI.OUT chứa số nguyên biểu diễn số lượng các tuyến
đường khác nhau nối liền thành phố 1 và 2. Nếu số tìm được có hơn 9 chữ số thì chỉ xuất ra 9
chữ số cuối. Nếu tìm được vô số tuyến đường thì xuất ra "Inf".
DUONGDI.INP DUONGDI.OUT DUONGDI.INP DUONGDI.OUT
6 7 4 2 3 6 8 5 6 Inf
1 3 5 6 1 3 6 5
1 4 6 5 1 4 3 4
3 2 3 4 3 2 4 3
4 2