ในปัญหานี้ เราได้รับสี่ค่า 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