นี่เป็นปริศนาทั่วไปที่หลายคนแก้ไขด้วยตนเอง ตอนนี้เป็นเวลาที่จะเขียนอัลกอริทึมเพื่อแก้ปัญหาเดียวกัน
มีไม้ขีดไฟจำนวนเท่ากันเรียงกันในสองด้านที่แตกต่างกันหันหน้าไปทางทิศทางของกันและกัน มีช่องว่างเดียวระหว่างพวกเขา พูดอะไรบางอย่างเช่นรูปต่อไปนี้ (ถ้าจำนวนไม้ขีดทั้งหมดเท่ากับ 4)
ไม้เท้าแต่ละอันสามารถเลื่อนไปข้างหน้าหนึ่งก้าวในทิศทางไปข้างหน้า (หากว่างด้านหน้าทันทีเป็นอิสระ) หรือสามารถกระโดดข้ามแท่งหนึ่งอันที่ด้านหน้าและลงสู่พื้นที่ว่าง (ถ้าพื้นที่ว่างว่าง) ไม่สามารถเคลื่อนที่ในทิศทางตรงกันข้าม (แม้พื้นที่ว่าง) ไม่อนุญาตให้ย้อนกลับได้ อนุญาตให้ย้ายได้เพียงหนึ่งครั้งในขั้นตอนเดียว
ตอนนี้คุณต้องเขียนอัลกอริทึมเพื่อค้นหาขั้นตอนต่ำสุดที่จำเป็นต้องใช้ซึ่งไม้ขีดการจับคู่ด้านซ้ายทั้งหมดจะลงจอดทางด้านขวามือ
ตัวอย่างเช่น: หากมีไม้ขีดทั้งหมด 2 คู่ (1 ในแต่ละด้าน) ขั้นตอนจะเป็น:
หมายเหตุ: ในภาพด้านบนแท่งด้านซ้ายถูกขยับก่อน วิธีแก้ปัญหาอื่นจะเกิดขึ้นเมื่อแท่งด้านขวาเคลื่อนที่ก่อน แต่สำหรับปัญหานี้คุณต้องแก้ปัญหาเพียงข้อเดียวเท่านั้นและนั่นก็คือสมมติว่าแท่งด้านซ้ายเคลื่อนที่ก่อน
รูปต่อไปนี้อธิบายการเคลื่อนไหวด้วย 4 ไม้ขีด (2 ในแต่ละด้าน):
หมายเหตุ: ในภาพด้านบนแท่งด้านซ้ายถูกขยับก่อน วิธีแก้ปัญหาอื่นจะเกิดขึ้นเมื่อแท่งด้านขวาเคลื่อนที่ก่อน แต่สำหรับปัญหานี้คุณต้องแก้ปัญหาเพียงข้อเดียวเท่านั้นและนั่นก็คือสมมติว่าแท่งด้านซ้ายเคลื่อนที่ก่อน
[การสันนิษฐาน: อินพุตสามารถเป็นเลขคู่ใดก็ได้ระหว่าง 02 ถึง 14 (เช่น 1 ถึง 7 การจับคู่แท่งในแต่ละด้าน) สำหรับอินพุตภายนอกช่วงนี้คุณไม่จำเป็นต้องทำการตรวจสอบใด ๆ และไม่จำเป็นต้องให้ข้อความแสดงข้อผิดพลาดใด ๆ หมายเหตุ: ในผลลัพธ์แต่ละขั้นตอนจะถูกคั่นด้วย '|' อักขระ (ไพพ์) โปรแกรมเมอร์ภาษาโคบอลควรสันนิษฐานว่า PIC 9 (2) เป็นขนาดอินพุต & อาจสันนิษฐานว่าเอาต์พุตเป็นความยาวสูงสุดคงที่ 450 ตัวอักษรโดยมีช่องว่างด้านขวา]
ตัวอย่างอินพุต:
02
ตัวอย่างผลลัพธ์:
01To02|03To01|02To03|
ตัวอย่างอินพุต:
04
ตัวอย่างผลลัพธ์:
02To03|04To02|05To04|03To05|01To03|02To01|04To02|03To04|
ตัวอย่างอินพุต:
06
ตัวอย่างผลลัพธ์:
03To04|05To03|06To05|04To06|02To04|01To02|03To01|05To03|07To05|06To07|04To06|02To04|03To02|05To03|04To05|