ในปัญหานี้ เราได้รับค่าสี่ค่า x1, y1, x2, y2 ซึ่งแทนจุดสองจุด (x1, y1) และ (x2, y2) งานของเราคือหาการเคลื่อนที่เดียวในเมทริกซ์ เราต้องหาทิศทางที่ใช้เคลื่อนที่จากจุดหนึ่ง (x1, y1) ไป (x2, y2) อาจมีการเคลื่อนที่หลายครั้ง แต่อย่างใดอย่างหนึ่งทิศทางต้องเป็นทิศทางเดียว และเราต้องคืนค่าทิศทางในรูปแบบ - "left", "right", "up", "down" มิฉะนั้นคืนค่า -1 แทน "not possible"
มาดูตัวอย่างเพื่อเข้าใจปัญหา
Input
x1 = 2, y1 = 1, x2 = 5, y1 = 1
Output
Right
วิธีแก้ปัญหา
วิธีแก้ที่ง่ายคือใช้ข้อเท็จจริงว่าเพื่อไปถึงจุดหมายจากต้นทาง ดัชนี x1:x2 หรือ y1:y2 ต้องมีค่าเท่ากัน สำหรับค่าต่างๆ นี่คือกรณีต่างๆ
Case 1: x1 = x2 & y1 > y2 -> Direction: Left Case 2: x1 = x2 & y2 > y1 -> Direction: Right Case 3: y1 = y2 & x1 > x2 -> Direction: Up Case 4: 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