Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```` c++
- #include <iostream>
- using namespace std;
- typedef struct point {
- int x, y;
- } point;
- typedef struct neighbours {
- int n;
- point elems[4];
- } neighbours;
- neighbours get_neighbours(int** labyrinth, int n, int m, point p) {
- neighbours neigh;
- neigh.n=0;
- if (p.y < m-1) {
- neigh.elems[neigh.n].y=p.y+1;
- neigh.elems[neigh.n].x=p.x;
- neigh.n++;
- }
- if (p.y > 0) {
- neigh.elems[neigh.n].y = p.y-1;
- neigh.elems[neigh.n].x = p.x;
- neigh.n++;
- }
- if (p.x > 0) {
- neigh.elems[neigh.n].y = p.y;
- neigh.elems[neigh.n].x = p.x-1;
- neigh.n++;
- }
- if (p.x < n-1) {
- neigh.elems[neigh.n].y = p.y;
- neigh.elems[neigh.n].x = p.x+1;
- neigh.n++;
- }
- return neigh;
- }
- bool dfs(int** graph, int n, int m, bool** visited, point p, point end) {
- if (p.x == end.x && p.y == end.y) return true;
- visited[p.x][p.y] = true;
- neighbours neigh = get_neighbours(graph, n, m, p);
- for (int i = 0; i < neigh.n; i++) {
- if (!visited[neigh.elems[i].x][neigh.elems[i].y] && graph[neigh.elems[i].x][neigh.elems[i].y]==1)
- if(dfs(graph, n, m, visited, neigh.elems[i], end)) return true;
- }
- return false;
- }
- int main() {
- int n, m;
- cin >> n;
- cin >> m;
- int **labyrinth = new int*[n];
- for (int i = 0; i<n; i++) labyrinth[i] = new int[m];
- bool** visited = new bool*[n];
- for (int i = 0; i<n; i++){
- visited[i] = new bool[m];
- for(int j=0; j<n; j++) visited[i][j]=false;
- }
- for (int i = 0; i<n; i++) {
- for (int j = 0; j<m; j++) {
- cin >> labyrinth[i][j];
- }
- }
- point start, end;
- cin >> start.x;
- cin >> start.y;
- cin >> end.x;
- cin >> end.y;
- cout << (dfs(labyrinth, n, m, visited, start, end) ? "TAK" : "NIE") << endl;
- }
- ````
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement