คำถามติดแท็ก a-star

3
จะค้นหาเส้นทางที่สั้นที่สุดที่มีโหนดหนอนได้อย่างไร
นี่คือตัวอย่างของสิ่งที่ฉันต้องการทำผ่านรหัส ฉันรู้ว่าคุณสามารถใช้การค้นหาจุดกระโดดได้อย่างง่ายดายจากโหนดสีเขียวไปยังโหนดสีแดงโดยไม่มีปัญหาหรือแม้แต่ A * แต่คุณจะคำนวณสิ่งนี้อย่างไรกับการแปรปรวน ในภาพคุณจะเห็นว่ามันใช้เวลาเพียง 8 ย้ายจากโหนดสีเขียวไปยังโหนดสีแดงเมื่อถ่ายเส้นทางสีฟ้า เส้นทางสีน้ำเงินย้ายตำแหน่งของคุณจากโหนดสีม่วงไปยังตำแหน่งถัดไปทันที พื้นที่ตรงกลางที่มีค่าใช้จ่าย 2 การเคลื่อนไหวเป็นจุดระหว่างสองโซน warp ที่คุณต้องย้ายไป เห็นได้ชัดว่าเร็วกว่าที่จะใช้เส้นทางสีฟ้าเนื่องจากคุณจะต้องย้ายครึ่งหนึ่ง (ประมาณ) เท่า ๆ กับเส้นทางสีเหลือง แต่ฉันจะทำสิ่งนี้อย่างไรในเชิงโปรแกรม? เพื่อจุดประสงค์ในการแก้ปัญหานี้สมมติว่ามี "วาร์ป" สีม่วงหลายรอบกราฟที่คุณสามารถใช้งานได้และเรารู้ว่าจุดสีม่วงแต่ละจุดจะโค้งงอและตรงไหนบนกราฟ วาร์ปสีม่วงบางตัวเป็นแบบสองทิศทางและบางอันไม่ใช่ความหมายบางครั้งคุณสามารถป้อนวาร์ปจากด้านหนึ่ง แต่ไม่กลับไปหลังจากการแปรปรวน ฉันคิดเกี่ยวกับวิธีแก้ปัญหาและสรุปเพียงว่าฉันจะสามารถคำนวณปัญหาได้โดยการตรวจสอบระยะทางไปยังจุดแปรปรวนแต่ละจุด (ลบจุดเดียวทิศทาง) และความแตกต่างระหว่างจุดเหล่านั้นและจุดที่อยู่ใกล้พวกเขา . โปรแกรมจะต้องคิดออกว่ามันจะมีประโยชน์มากกว่าที่จะใช้วิปริตที่สองแทนที่จะเดินจากการกระโดดครั้งแรก ดังนั้นแทนที่จะเคลื่อนที่ 6 จุดจากนั้นแปรปรวนจากนั้นย้ายส่วนที่เหลืออีก 8 ก้าวด้วยการเดินเท้า (ซึ่งเร็วกว่าการไม่ใช้ warps เลย) จะใช้การเคลื่อนไหว 6 ครั้งจากนั้นทั้งสองเดินไปที่วิปริตสอง แก้ไข:ฉันรู้ว่าเส้นทางสีน้ำเงินจะใช้เวลา 12 การเคลื่อนไหวแทนที่จะเป็น 8 แต่คำถามยังคงเหมือนเดิม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.