พฤติกรรมเมื่อเจอวงจรติดลบ ของ ขั้นตอนวิธีของฟลอยด์-วอร์แชล

วงจรติดลบ คือ วงจรที่มีผลรวมของระยะทางของเส้นเชื่อมเป็นค่าลบ ระยะทางสั้นสุดไม่สามารถกำหนดได้เนื่องจาก เส้นทางสามารถติดลบไปเรื่อยๆ ก็จะน้อยลงเรื่อยไม่มีที่สิ้นสุด สำหรับ ขั้นตอนวิธีของฟลอยด์-วอร์แชล นั้นจะสังเกตวงจรลบได้จาก path[i][j] เมื่อ i มีค่าเท่ากับ j โดยถ้า path[i][j]<0 เมื่อ i มีค่าเท่ากับ j แสดงว่ามีวงจรลบ จะไม่สามารถหาคำตอบได้

  • เริ่มต้น ความยาวของเส้นทาง (i,i) เป็น 0
  • เส้นทาง {(i,k), (k,i)} สามารถเปลี่ยนไปเรื่อยๆ
  • หลังจากทำขั้นตอนวิธีนี้แล้ว (i,i) จะเป็นลบ ถ้ามี เส้นทางความยาวติดลบมาจาก i
  • ถ้ามีความยาวจาก i กลับมา i เป็นลบ จะได้ว่า ระยะทางสั้นสุดที่ได้ผ่านปมระหว่างทางมามีค่าน้อยกว่า 0 จะเรียกว่าวงจรลบ
 1  /* สมมุติให้ฟังก์ชัน edgeCost (i,j) คืนค่า น้ำหนักของเส้นเชื่อมจาก i ไป j 2  */ 3 4  จำนวนเต็ม path[][]; 5  /* อาเรย์ 2 มิติ path[i][j] เป็นเส้นทางสั้นที่สุดจากปม i ไป j โดยใช้ ปมเริ่มต้น (1..k−1). 6  ในแต่ละขั้นตอนของ ขั้นตอนวิธี  โดยแต่ละ path[i][j] มีค่าเริ่มต้นคือ  edgeCost (i,j). 7  */ 8 9  /* ขั้นตอนวิธีของฟลอยด์-วอร์แชล */10   ขั้นตอน  ฟลอยด์-วอร์แชล ()11      ตั้งแต่ k := 1 ถึง n12        ตั้งแต่ i := 1 ถึง n13           ตั้งแต่ j := 1 ถึง n14              path[i][j] = ค่าน้อยที่สุด ( path[i][j], path[i][k]+path[k][j] ) ;15   ตั้งแต่ i := 1 ถึง16      ถ้า path[i][i] < 0 เมื่อนั้น17         มีวงจรติดลบอยู่


ใกล้เคียง

ขั้นตอนวิธีแบบยุคลิด ขั้นตอนวิธีการค้นหาเพื่อนบ้านใกล้สุด k ตัว ขั้นตอนวิธีของฟลอยด์-วอร์แชล ขั้นตอนวิธีของควิน-แม็กคลัสกีย์ ขั้นตอนวิธีฮังกาเรียน ขั้นตอนวิธี ขั้นตอนวิธีของชอร์ ขั้นตอนวิธีเชิงพันธุกรรม ขั้นตอนวิธีโบรน-เคอร์โบสท์ ขั้นตอนวิธีของไดก์สตรา

แหล่งที่มา

WikiPedia: ขั้นตอนวิธีของฟลอยด์-วอร์แชล http://quickgraph.codeplex.com/ http://www.codeplex.com/quickgraph http://www.cplusplus.happycodings.com/Algorithms/c... http://julmis.julmajanne.com/index.php/FloydWarsha... http://www.mathworks.com/matlabcentral/fileexchang... http://www.microshell.com/programming/computing-de... http://www.microshell.com/programming/floyd-warsha... http://tide4javascript.com/?s=Floyd http://www.youtube.com/watch?v=Cadt4OYXpJQ http://www.youtube.com/watch?v=Sygq1e0xWnM