Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 유령 탈출

<시간/>

단순화된 Pacman 게임을 하고 있다고 가정합니다. 이제 지점 (0, 0)에서 시작하고 목적지는 (target[0], target[1])입니다. 맵에는 여러 개의 고스트가 있습니다. 여기서 i번째 고스트는 (고스트[i][0], 고스트[i][1])에서 시작합니다. 각 턴에서 우리와 모든 유령은 북쪽, 동쪽, 서쪽 또는 남쪽의 4가지 기본 방향 중 하나로 동시에(할 수 있음) 마지막 지점에서 1단위 거리의 새 지점으로 이동합니다. 유령이 우리에게 도달하기 전에 목표물에 도달할 수 있는 경우에만 탈출할 수 있습니다(고스트가 취할 수 있는 주어진 이동에 대해). 유령과 동시에 어떤 사각형(목표물 포함)에든 도달하면, 그것은 탈출하지 않습니다 탈출로 간주합니다. 따라서 탈출이 가능할 때 True를 반환해야 합니다.

따라서 입력이 [[1,0], [0,3]]과 같고 대상이 [0,1]이면 결과는 참입니다. 1시간에 목적지 (0, 1)에 직접 도달할 수 있는 반면 (1, 0) 또는 (0, 3)에 있는 유령은 우리를 잡을 방법이 없기 때문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 나 :=|대상[1]| + |대상[0]|
  • x :=0
  • i 범위 0에서 고스트 배열 크기 – 1
    • x :=|고스트[i,0] – 대상[0]| + |고스트[i, 1] – 대상[1]|
    • x <=나인 경우 false를 반환합니다.
  • 참을 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool escapeGhosts(vector<vector<int>>& ghosts, vector<int>& target) {
      int me = abs(target[1]) + abs(target[0]);
      int x = 0;
      for(int i = 0; i < ghosts.size(); i++){
         x = abs(ghosts[i][0] - target[0]) + abs(ghosts[i][1] - target[1]);
         if(x <= me) return false;
      }
      return true;
   }
};
main(){
   vector<vector<int>> v1 = {{1,0}, {0,3}};
   vector<int> v2 = {0,1};
   Solution ob;
   cout << (ob.escapeGhosts(v1, v2));
}

입력

[[1,0],[0,3]]
[0,1]

출력

1