เป็นไปได้ไหมที่จะมีโครงสร้างเหมือนรังผึ้งเชื่อมต่อห้องพักทุกห้องโดยไม่ต้องมีทางเดินมากเกินไป? (มีคนมากเกินไปที่มี 3-4 คน + เดินมาจากห้องเดียว)
ด้านล่างเป็นผลลัพธ์ของลักษณะห้องของฉันโดยทั่วไปพวกเขาวางแบบสุ่ม
สิ่งที่ฉันหวังว่าจะได้ทางเดินที่ชาญฉลาด
เป็นไปได้ไหมที่จะมีโครงสร้างเหมือนรังผึ้งเชื่อมต่อห้องพักทุกห้องโดยไม่ต้องมีทางเดินมากเกินไป? (มีคนมากเกินไปที่มี 3-4 คน + เดินมาจากห้องเดียว)
ด้านล่างเป็นผลลัพธ์ของลักษณะห้องของฉันโดยทั่วไปพวกเขาวางแบบสุ่ม
สิ่งที่ฉันหวังว่าจะได้ทางเดินที่ชาญฉลาด
คำตอบ:
วิธีที่ง่ายที่สุดที่ฉันคิดได้เริ่มต้นด้วยการทำให้แน่ใจว่าทุกห้องเชื่อมต่อกันด้วยทางเดินอย่างน้อย 1 ทาง:
ตอนนี้เรารู้ว่าคุณสามารถไปที่ห้องพักทุกห้อง แต่ตอนนี้ถ้าคุณต้องการเขาวงกตเชิงเส้นมากกว่านี้คุณก็สามารถก้าวผ่านห้องของคุณและสร้างเส้นทางใหม่เพื่อเชื่อมต่อห้องต่างๆได้ถึงขีด จำกัด ต่อห้อง 2-3 หรือ จนกว่าจะมีบางเปอร์เซ็นต์ของห้องพักเข้าถึงการเชื่อมต่อสูงสุด - ฯลฯ
ในขั้นตอนสุดท้ายคุณสามารถเพิ่มกฎที่จะเปลี่ยนผลลัพธ์ของคุณให้เข้ากับสถานการณ์ต่างๆ ตัวอย่างเช่นคุณอาจสังเกตเห็นว่าห้องใด ๆ ที่มีทางเดินเพียง 1 ห้องก็คือทางตัน คุณสามารถทำให้ตายได้มากขึ้นหรือคุณสามารถกำจัดพวกมันทั้งหมดโดยทำให้แน่ใจว่าทุกอย่างมีอย่างน้อย 2 การเชื่อมต่อ คุณสามารถทำให้สิ้นตายมีทางลับ คุณสามารถตรวจสอบให้แน่ใจว่าหัวหน้าห้องนั้นตายไปแล้ว คุณสามารถตรวจสอบให้แน่ใจว่าห้องเริ่มต้นของคุณเป็นจุดสิ้นสุด แต่จากนั้นตรวจสอบให้แน่ใจว่าห้องที่สองมีการเชื่อมต่อ X ขั้นต่ำ Ad infinitum
สมมติฐานและกฎแต่ละข้อสามารถเปลี่ยนระดับของคุณอย่างรุนแรง แต่นั่นเป็นส่วนหนึ่งของความสนุก! อย่างน้อยที่สุดคุณควรได้รับห้องที่เหมือนเป็นถ้ำ
เพียงแค่สร้างห้องของคุณเชื่อมต่ออยู่แล้ว เริ่มด้วยห้องหนึ่งจากนั้นสร้างทางเดิน 1-3 ห้องไปที่ห้องอื่น จากนั้นทำการเติมเงินจนกว่าคุณจะเพิ่มห้องเพียงพอ
เนื่องจากห้องเหล่านี้เป็นกราฟจุดยอดที่ฝังอยู่ในที่ราบ 2d ซึ่งในทางทฤษฎีสามารถทำได้โดยการแก้ปัญหาพนักงานขายที่เดินทาง เห็นได้ชัดว่าฮิวริสติกแบบง่ายจะใช้ได้และให้ความยืดหยุ่นที่สมเหตุสมผล
คุณคำนวณขอบ (ความยาวทางเดิน) ระหว่างห้องทั้งหมด คุณจัดเรียงตามความยาว คุณเพิ่มทางเดินที่สั้นที่สุดเว้นแต่จะสร้างวงจรหรือเพิ่มระดับของจุดยอด (ห้อง) เหนือค่าสูงสุดที่คุณต้องการ (3-4) (ทำซ้ำ) ในการตรวจสอบรอบคุณสามารถใช้ UnionFind หรือทำ BFS อย่างรวดเร็วกับข้อมูลขนาดเล็ก