Có phải là một cây xương rồng?


23

Trong lý thuyết đồ thị, Cactus là một biểu đồ được kết nối sao cho bất kỳ hai chu kỳ đơn giản khác nhau trong biểu đồ chia sẻ nhiều nhất một đỉnh.

Dưới đây là một cây xương rồng với 3 chu kỳ đơn giản được phác thảo bằng các đường đứt nét.

Đồ thị xương rồng

Biểu đồ sau tương tự như biểu đồ trong hình trên nhưng không phải là Xương rồng vì hai đỉnh có nhãn màu đỏ được chia sẻ bởi hai chu kỳ đơn giản.

Không phải đồ thị xương rồng

Mọi thứ có thể trở nên phức tạp hơn một chút, ví dụ như biểu đồ sau:

Cũng không phải là một biểu đồ xương rồng

Có thể trông giống như một cây xương rồng nhưng nó không phải là. Điều này có thể được hiển thị bằng cách làm nổi bật chu trình sau:

Chu kỳ nổi bật

Chu trình này chia sẻ nhiều hơn một điểm với rất nhiều chu kỳ rõ ràng hơn trong biểu đồ.

Định nghĩa

  • Biểu đồ được kết nối là một biểu đồ sao cho tồn tại ít nhất một đường giữa hai đỉnh bất kỳ.

  • Một chu trình đơn giản là một đường dẫn trên biểu đồ bắt đầu và kết thúc tại cùng một đỉnh và truy cập không có đỉnh nhiều hơn một lần.

  • Một đồ thị đơn giản là một đồ thị không có trọng số, không có trọng số sao cho không có các đỉnh được kết nối với nhau bằng nhiều hơn một cạnh và không có đỉnh nào được kết nối với chính nó. Biểu đồ đơn giản là loại biểu đồ cơ bản nhất và là ý nghĩa của hầu hết mọi người khi họ nói biểu đồ.

Bài tập

Lấy một biểu đồ đơn giản làm đầu vào và quyết định xem đó có phải là biểu đồ Cactus không. Bạn nên xuất hai giá trị riêng biệt một cho Đúng và một cho Sai. Bạn có thể lấy đầu vào ở bất kỳ định dạng nào bạn thấy phù hợp.

Đây là vì vậy bạn nên cố gắng giảm thiểu số byte trong câu trả lời của mình.

Các trường hợp thử nghiệm

Các trường hợp thử nghiệm như Ma trận điều chỉnh


Bạn có thể xem giải pháp của tôi không, cho tôi biết nếu nó hợp lệ? Tôi cảm thấy như mô hình rõ ràng là quá rõ ràng và tôi đã bỏ lỡ điều gì đó.
Xù xì

@Shaggy Tôi không thể đọc JavaScript, Nếu bạn giải thích nó, tôi có thể làm được.
Thuật sĩ lúa mì

Tôi có thể thử. Tôi đang kiểm tra 2 điều: 1) Có echứa chính xác một yếu tố VÀ có vchứa chính xác 2 VÀ có vbằng với yếu tố đầu tiên ekhông? 2) HOẶC Có vbằng tập hợp các phần tử đầu tiên của mỗi phần tử trong ekhông? Trường hợp thử nghiệm thứ hai vượt qua kiểm tra đầu tiên ( v=[1,2]=e[0]=[1,2]) và các trường hợp thử nghiệm khác phải đúng với trường hợp thứ hai, ví dụ: trường hợp # 4 : v=[1,2,3,4,5,6]=[e[0][0],e[1][0],e[2][0],e[4][0]]=[1,2,3,4,5,6].
Xù xì

@Shaggy Điều này không hoạt động ví dụ như sơ đồ đầu tiên được cung cấp không thành công. console.log(f([1,2,3,4,5,6,7,8,9,10,11,12,13])([[1,2],[1,3],[3,4],[2,4],[3,5],[5,6],[6,7],[7,8],[8,5],[7,9],[9,10],[10,11],[11,7],[8,12],[8,13]]))
Thuật sĩ lúa mì

Có nên trả lại truehay falsekhông?
Xù xì

Câu trả lời:


9

Toán học, 62 byte

Sort@#==#⋃#&[Join@@FindCycle[#,∞,All]]&&ConnectedGraphQ@#&

Kiểm tra: (find all cycles, there are no duplicate edges)(The graph is a connected graph)


1
gnên #, phải không?
ngenisis

6
Vì vậy, bạn đang nói với tôi rằng không có isCactusnội dung? Tôi thất vọng.
Aaron

Ai đó nên viết một.
Draco18

Bạn nên đặt Mathicala Simplified như một câu trả lời riêng.
mbomb007

3
@Aaron Nó sẽ là CactusQnếu nó tồn tại, tôi tin.
NieDzejkob
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.