Advertisement
Guest User

labirynt

a guest
Apr 26th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. ```` c++
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. typedef struct point {
  6. int x, y;
  7. } point;
  8.  
  9. typedef struct neighbours {
  10. int n;
  11. point elems[4];
  12. } neighbours;
  13.  
  14. neighbours get_neighbours(int** labyrinth, int n, int m, point p) {
  15. neighbours neigh;
  16. neigh.n=0;
  17. if (p.y < m-1) {
  18. neigh.elems[neigh.n].y=p.y+1;
  19. neigh.elems[neigh.n].x=p.x;
  20. neigh.n++;
  21. }
  22.  
  23.  
  24. if (p.y > 0) {
  25. neigh.elems[neigh.n].y = p.y-1;
  26. neigh.elems[neigh.n].x = p.x;
  27. neigh.n++;
  28. }
  29.  
  30.  
  31. if (p.x > 0) {
  32. neigh.elems[neigh.n].y = p.y;
  33. neigh.elems[neigh.n].x = p.x-1;
  34. neigh.n++;
  35. }
  36.  
  37. if (p.x < n-1) {
  38. neigh.elems[neigh.n].y = p.y;
  39. neigh.elems[neigh.n].x = p.x+1;
  40. neigh.n++;
  41. }
  42. return neigh;
  43. }
  44.  
  45. bool dfs(int** graph, int n, int m, bool** visited, point p, point end) {
  46. if (p.x == end.x && p.y == end.y) return true;
  47. visited[p.x][p.y] = true;
  48. neighbours neigh = get_neighbours(graph, n, m, p);
  49. for (int i = 0; i < neigh.n; i++) {
  50. if (!visited[neigh.elems[i].x][neigh.elems[i].y] && graph[neigh.elems[i].x][neigh.elems[i].y]==1)
  51. if(dfs(graph, n, m, visited, neigh.elems[i], end)) return true;
  52. }
  53. return false;
  54. }
  55.  
  56.  
  57. int main() {
  58. int n, m;
  59. cin >> n;
  60. cin >> m;
  61. int **labyrinth = new int*[n];
  62. for (int i = 0; i<n; i++) labyrinth[i] = new int[m];
  63. bool** visited = new bool*[n];
  64. for (int i = 0; i<n; i++){
  65. visited[i] = new bool[m];
  66. for(int j=0; j<n; j++) visited[i][j]=false;
  67. }
  68.  
  69. for (int i = 0; i<n; i++) {
  70. for (int j = 0; j<m; j++) {
  71. cin >> labyrinth[i][j];
  72. }
  73. }
  74. point start, end;
  75. cin >> start.x;
  76. cin >> start.y;
  77. cin >> end.x;
  78. cin >> end.y;
  79. cout << (dfs(labyrinth, n, m, visited, start, end) ? "TAK" : "NIE") << endl;
  80. }
  81. ````
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement