From c87154cdc14fe3d249baa63b75bf1065755aea7c Mon Sep 17 00:00:00 2001 From: Devesh511 <36008010+Devesh511@users.noreply.github.com> Date: Wed, 23 Oct 2019 22:25:32 +0530 Subject: [PATCH] Create ValidPath.cpp --- Graphs/ValidPath.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Graphs/ValidPath.cpp diff --git a/Graphs/ValidPath.cpp b/Graphs/ValidPath.cpp new file mode 100644 index 0000000..93d7de4 --- /dev/null +++ b/Graphs/ValidPath.cpp @@ -0,0 +1,60 @@ +//https://www.interviewbit.com/problems/valid-path/ + +int dx[] = {0, 0, 1, 1, 1, -1, -1, -1}; +int dy[] = {1, -1, 1, 0, -1, 1, 0, -1}; + +bool issafe(int x1, int y1, int x2, int y2, int r) +{ + int d = ((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)); + int r2 = r * r; + return (d > r2); +} + +bool isin(int x, int y, int r, int c) +{ + if((x < 0) || (y < 0) || (x > r) || (y > c)) + return false; + return true; +} + +void dfs(int x, int y, int r, int c, vector >&safe, vector >&visited) +{ + if(!safe[x][y]) + return; + + visited[x][y] = true; + + for(int i = 0; i < 8; i++) + { + int nx = x + dx[i], ny = y + dy[i]; + + if(isin(nx, ny, r, c) && (!visited[nx][ny])) + dfs(nx, ny, r, c, safe, visited); + } +} + +string Solution::solve(int r, int c, int n, int R, vector &X, vector &Y) +{ + vector > safe(r + 1, vector (c + 1, true)); + vector > visited(r + 1, vector (c + 1, false)); + + for(int i = 0; i <= r; i++) + { + for(int j = 0; j <= c; j++) + { + for(int k = 0; k < n; k++) + { + safe[i][j] = issafe(i, j, X[k], Y[k], R); + + if(!safe[i][j]) + break; + } + } + } + + dfs(0, 0, r, c, safe, visited); + + if(visited[r][c]) + return string ("YES"); + return string ("NO"); +}