รอบการจำกราฟ - คำอธิบายง่ายๆ


9

บางคนได้โปรดช่วยฉันเข้าใจวิธีหารอบในกราฟในแง่ laymans?

ฉันได้อ่านคำถามอื่น ๆ เช่นหน้านี้และหน้าวิกิพีเดียบางหน้า แต่ดูเหมือนว่าพวกเขาจะเข้าสู่ศัพท์แสงทางคณิตศาสตร์ค่อนข้างเร็ว

ฉันมีรูปแบบของกราฟในจาวาการสร้างแบบจำลองโหนดและ 'ใน' และ 'ออก' ขอบ - และรูปแบบรู้ว่าโหนดเชื่อมต่อเพียงทิศทางเดียวนี้ช่วยให้ฉันสามารถหาโหนดใบเป็นจุดเริ่มต้นแผนของฉันคือ เพื่อเดินกลับกราฟจากโหนดใบไม้เหล่านี้สำหรับ "เดิน" แต่ละอันเก็บรายการโหนดอื่น ๆ ทั้งหมดที่ฉันพบในเส้นทางของฉัน ถ้าฉันเห็นบางสิ่งบางอย่างในรายการอยู่แล้ว ณ จุดใดฉันจะรู้ว่าฉันพบวงจรในกราฟ อย่างไรก็ตามสิ่งนี้ให้ความรู้สึกเรียบง่ายเล็กน้อย

ฉันแน่ใจว่านี่เป็นปัญหาที่แก้ไขแล้วมันจะดีถ้ามันสามารถอธิบายได้ในแง่ง่าย ๆ

-ace

คำตอบ:


6

วิธีที่ง่ายที่สุดที่ฉันสามารถนึกได้ว่าจะอธิบายรอบกราฟในแง่ของคนธรรมดาคืออะไร:

  • อันดับแรกฉันคิดว่าคุณรู้พื้นฐานของกราฟและโหนดและขอบคืออะไร ตัวอย่างนี้สมมติว่าคุณมีกราฟที่ขอบทั้งหมดเป็นแบบทางเดียวเท่านั้น
  • สร้างกราฟของคุณและเลือกหนึ่งโหนดเป็นจุดเริ่มต้น
  • สร้างวัตถุคอนเทนเนอร์ของการเรียงลำดับบางอย่าง (รายการหรือแฮชจะทำงานได้ดีที่สุด) เรียกว่า "เยี่ยมชม"
  • สร้างวัตถุคอนเทนเนอร์ที่สอง (คิวจะเหมาะที่สุดที่นี่) และเรียกมันว่า "เปิด"
  • เพิ่มโหนดเริ่มต้นให้กับรายการ Open
  • ทำซ้ำขณะที่รายการเปิดไม่ว่างเปล่า:
    • ลบรายการแรกออกจากเปิดและเรียกว่าเป็นปัจจุบัน
    • หากปัจจุบันมีอยู่ในการเข้าชมคุณมีวงจร
    • ถ้าไม่ใช่ให้เพิ่ม Current to Visited แล้วเพิ่มโหนดทั้งหมดที่ Current สามารถเข้าถึงจากขอบขาออกของมันเป็น Open
  • หาก Open สิ้นสุดเปล่าและไม่พบรอบใดเลยแสดงว่าคุณไม่มีรอบใดเลย (อย่างน้อยก็ไม่ได้อยู่ในชุดที่เข้าถึงได้ซึ่งมีจุดเริ่มต้นจากจุดเริ่มต้นซึ่งไม่จำเป็นต้องเท่ากับกราฟทั้งหมดหากคุณมีเกาะในกราฟของคุณ)

0

โดยพื้นฐานแล้วคุณทำการค้นหาแบบกว้างเป็นอันดับแรกบนกราฟและติดตามโหนดที่คุณเข้าชมโดยใช้ hashmap

ณ เวลาใด ๆ หากคุณพบโหนดที่มีการเยี่ยมชมแล้ว (มีอยู่ใน hashmap) คุณจะรู้ว่ามีรอบในกราฟ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.