ในปัญหานี้ เราได้รับสี่ค่า x1, y1, x2, y2 ซึ่งแสดงถึงสองจุด (x1, y1) และ (x2, y2) งานของเราคือค้นหาการเคลื่อนไหวเดี่ยวในเมทริกซ์ เราต้องหาทิศทางที่เราจะเคลื่อนที่จากจุดหนึ่ง (x1, y1) ไปยัง (x2, y2) ได้ ทิศทางที่จำเป็นในการเป็นโสดสามารถมีจำนวนการเคลื่อนไหวเท่าใดก็ได้และเราจำเป็นต้องกลับทิศทางในรูปแบบ - "ซ้าย" , "ขวา", "ขึ้น", "ลง" มิฉะนั้นให้คืนค่า -1 แสดงว่า "เป็นไปไม่ได้"
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
x1 = 2, y1 = 1, x2 = 5, y1 = 1
ผลลัพธ์
Right
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือการใช้ข้อเท็จจริงที่ว่าในการเข้าถึงปลายทางจากต้นทาง พิกัด x1:x2 หรือ y1:y2 อันใดอันหนึ่งอันใดอันหนึ่งจะต้องเหมือนกัน สำหรับค่า มีกรณีดังต่อไปนี้ -
Case 1: x1 = x2 & y1 > y2 -> Direction : Left Case 1: x1 = x2 & y2 > y1 -> Direction : Right Case 1: y1 = y2 & x1 > x2 -> Direction : Up Case 1: y1 = y2 & x2 > x1 -> Direction : Down
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream> using namespace std; void findSingleMovement(int x1, int y1, int x2, int y2) { if (x1 == x2 && y1 < y2) cout<<"Right"; else if (x1 == x2 && y1 > y2) cout<<"Left"; else if (y1 == y2 && x1 < x2) cout<<"Down"; else if (y1 == y2 && x1 > x2) cout<<"Up"; else cout<<"Not Possible"; } int main() { int x1, x2, y1, y2; x1 = 2; y1 = 1; x2 = 5; y2 = 1; cout<<"The direction of movement is "; findSingleMovement(x1, y1, x2, y2); return 0; }
ผลลัพธ์
The direction of movement is Down