สมมติว่าเรามีจุดเริ่มต้น (sx, sy) และจุดเป้าหมาย (tx, ty) เราต้องตรวจสอบว่ามีลำดับการเคลื่อนที่จากจุดเริ่มต้นไปยังจุดสิ้นสุดหรือไม่ การเคลื่อนไหวในที่นี้ประกอบด้วยการจุด (x, y) และแปลงเป็น (x, x+y) หรือ (x+y, y)
ดังนั้น หากอินพุตเป็นเหมือน (sx, sy) =(1,1) (tx, ty) =(4,5) ผลลัพธ์จะเป็น True นั่นเป็นเพราะย้าย (1,1) ไปยัง (2, 1) จากนั้น (3,1) จากนั้น (4,1) จากนั้น (4,5)
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน Solve() นี่จะใช้เวลา sx, sy, tx, ty
-
ถ้า sx> tx หรือ sy> ty แล้ว
-
คืนค่าเท็จ
-
-
ถ้า sx เหมือนกับ tx แล้ว
-
return (ty-sy) mod sx เหมือนกับ 0
-
-
ถ้า sy เหมือนกับ ty แล้ว
-
return(tx - sx) mod sy เหมือนกับ 0
-
-
ส่งคืนการแก้ (sx, sy, tx-ty, ty) หรือแก้ (sx, sy, tx, ty-tx)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
def solve(sx, sy, tx, ty): if sx > tx or sy > ty: return False if sx == tx: return (ty-sy)%sx == 0 if sy == ty: return (tx - sx)%sy == 0 return solve(sx, sy, tx-ty, ty) or solve(sx, sy, tx, ty-tx) (sx, sy) = (1,1) (tx, ty) = (4,5) print(solve(sx, sy, tx, ty))
อินพุต
(1,1), (4,5)
ผลลัพธ์
True