Advertisement
Evgeny_Baulin

Homework 2 Task C

Mar 3rd, 2024
804
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4.  
  5. using namespace std;
  6.  
  7. bool isValid(int x, int y, int K, int N) {
  8.     return x >= 0 && y >= 0 && x < K && y < N;
  9. }
  10.  
  11. bool canReach(int K, int N, int j, int i, int m, int s) {
  12.     vector<pair<int, int>> moves = {{-2, -1},
  13.                                     {-2, 1},
  14.                                     {-1, -2},
  15.                                     {-1, 2},
  16.                                     {1,  -2},
  17.                                     {1,  2},
  18.                                     {2,  -1},
  19.                                     {2,  1}};
  20.  
  21.     vector<vector<bool>> visited(K, vector<bool>(N, false));
  22.     queue<pair<int, int>> q;
  23.     q.emplace(j - 1, i - 1);
  24.     visited[j - 1][i - 1] = true;
  25.  
  26.     while (!q.empty()) {
  27.         auto [x, y] = q.front();
  28.         q.pop();
  29.  
  30.         if (x == m - 1 && y == s - 1) return true;
  31.  
  32.         for (auto &move: moves) {
  33.             int nx = x + move.first, ny = y + move.second;
  34.             if (isValid(nx, ny, K, N) && !visited[nx][ny]) {
  35.                 visited[nx][ny] = true;
  36.                 q.emplace(nx, ny);
  37.             }
  38.         }
  39.     }
  40.  
  41.     return false;
  42. }
  43.  
  44. int main() {
  45.     int K, N, j, i, m, s;
  46.     cin >> K >> N >> j >> i >> m >> s;
  47.  
  48.     if (canReach(K, N, j, i, m, s))
  49.         cout << "YES" << endl;
  50.     else
  51.         cout << "NO" << endl;
  52.  
  53.     return 0;
  54. }
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement