Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบการกลับสู่จุดเริ่มต้นหลังเคลื่อนที่ตามทิศทางใน C++


ปัญหา

เริ่มที่ (0,0) ได้รับสตริงทิศทาง E(ตะวันออก), W(ตะวันตก), N(เหนือ), S(ใต้) ตรวจสอบว่ากลับมาที่ (0,0) ได้หรือไม่

ตัวอย่าง

"EENWWS" → True (E+E=N+W+W+S = กลับมาจุดเดิม)

อัลกอริธึม

นับ Net Displacement: x = count(E) - count(W), y = count(N) - count(S) ถ้าทั้งคู่เป็น 0 → กลับมาจุดเริ่มต้น

โปรแกรมตัวอย่าง

#include <bits/stdc++.h>
using namespace std;

bool canReturn(string moves) {
    int x = 0, y = 0;
    for (char c : moves) {
        if (c == 'E') x++;
        else if (c == 'W') x--;
        else if (c == 'N') y++;
        else if (c == 'S') y--;
    }
    return (x == 0 && y == 0);
}

int main() {
    cout << canReturn("EENWWS");  // 1 (true)
    return 0;
}