Giới thiệu
Cho một đồ thị vô hướng G, chúng ta có thể xây dựng một đồ thị L (G) (được gọi là đồ thị đường hoặc đồ thị liên hợp) biểu thị các kết nối giữa các cạnh trong G. Điều này được thực hiện bằng cách tạo một đỉnh mới trong L (G) cho mọi cạnh trong G và kết nối các đỉnh này nếu các cạnh mà chúng đại diện có một đỉnh chung.
Dưới đây là một ví dụ từ Wikipedia cho thấy việc xây dựng biểu đồ đường (màu xanh lá cây).
Một ví dụ khác, lấy biểu đồ G này với các đỉnh A, B, C và D.
A
|
|
B---C---D---E
Chúng ta tạo một đỉnh mới cho mỗi cạnh trong G. Trong trường hợp này, cạnh giữa A và C được biểu thị bằng một đỉnh mới gọi là AC.
AC
BC CD DE
Và kết nối các đỉnh khi các cạnh mà chúng đại diện có một đỉnh chung. Trong trường hợp này, các cạnh từ A đến C và từ B đến C có đỉnh C chung, do đó các đỉnh AC và BC được kết nối.
AC
/ \
BC--CD--DE
Biểu đồ mới này là biểu đồ đường của G!
Xem Wikipedia để biết thêm thông tin.
Thử thách
Đưa ra danh sách kề cho biểu đồ G, chương trình của bạn sẽ in hoặc trả về danh sách kề cho biểu đồ đường L (G). Đây là môn đánh gôn, vì vậy câu trả lời có ít byte nhất sẽ thắng!
Đầu vào
Danh sách các cặp chuỗi đại diện cho các cạnh của G. Mỗi cặp mô tả các đỉnh được kết nối bởi cạnh đó.
- Mỗi cặp (X, Y) được đảm bảo là duy nhất, có nghĩa là danh sách sẽ không chứa (Y, X) hoặc một giây (X, Y).
Ví dụ:
[("1","2"),("1","3"),("1","4"),("2","5"),("3","4"),("4","5")]
[("D","E"),("C","D"),("B","C"),("A","C")]
Đầu ra
Một danh sách các cặp chuỗi đại diện cho các cạnh của L (G). Mỗi cặp mô tả các đỉnh được kết nối bởi cạnh đó.
Mỗi cặp (X, Y) phải là duy nhất, có nghĩa là danh sách sẽ không chứa (Y, X) hoặc một giây (X, Y).
Đối với bất kỳ cạnh (X, Y) nào trong G, đỉnh mà nó tạo trong L (G) phải được đặt tên XY (các tên được nối với nhau theo cùng thứ tự mà chúng được chỉ định trong đầu vào).
Ví dụ:
[("12","13"),("12","14"),("12","25"),("13","14"),("13","34"),("14","34"),("14","45"),("25","45"),("34","45")]
[("DE","CD"),("CD","CB"),("CD","CA"),("BC","AB")]
Các trường hợp thử nghiệm
[] -> []
[("0","1")] -> []
[("0","1"),("1","2")] -> [("01","12")]
[("a","b"),("b","c"),("c","a")] -> [("ab","bc"),("bc","ca"),("ca","ab")]
[("1","2"),("1","3"),("1","4"),("2","5"),("3","4"),("4","5")] -> [("12","13"),("12","14"),("12","25"),("13","14"),("13","34"),("14","34"),("14","45"),("25","45"),("34","45")]
[("1","23"),("23","4"),("12","3"),("3","4")]
, mà đầu ra có lẽ là[("123","234"),("123","34")]
, không thể được giải thích chính xác. Tôi nghĩ cách duy nhất để khắc phục điều này là chỉnh sửa để đảm bảo rằng đầu vào sẽ không bao giờ chứa những sự mơ hồ như vậy, nhưng nếu câu hỏi này đã được đăng trong hộp cát thì tôi đã đề nghị nên bớt quy định về việc đặt tên các đỉnh trong đầu ra.