Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. //typedef vector<vector<bool>> Matrica;
  5. template<typename T>
  6. using Matrica = vector<vector<T>>;
  7. // funkcija koja kreira matricu postavljenu na false
  8. Matrica<bool> napraviMatricu(int m, int n, bool value){
  9. Matrica<bool> mat;
  10. for(int i=0; i<m; i++){
  11. vector<bool> tekuce;
  12. for(int j=0; j<n; j++)
  13. tekuce.push_back(value);
  14. mat.push_back(tekuce);
  15. }
  16. return mat;
  17. }
  18.  
  19.  
  20. // ispituje da li postoji put kroz labirint od polja (x1, y1) do
  21. // (x2, y2) pri cemu matrica posjecen oznacava koja su polja
  22. // posjecena, a koja nisu
  23. bool pronadjiPut(Matrica<bool>& labirint, Matrica<bool>& posjecen,
  24. int x1, int y1, int x2, int y2) {
  25. // ako se pocetno i krajnje polje poklapaju, put postoji
  26. if (x1 == x2 && y1 == y2)
  27. return true;
  28. // cetiri smjera u kojima se mozemo pomjerati
  29. int pomjeraj[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
  30. // pokusavamo pomeranja u svakom od tih smerova
  31. for (int i = 0; i < 4; i++) {
  32. // polje na koje se pomeramo
  33. int x = x1 + pomjeraj[i][0], y = y1 + pomjeraj[i][1];
  34. // ako smo na ivicama, moze da se desi da izadjemo van granica
  35. // labirinta pa moramo provjeriti da li smo u granicama
  36. // dimenzije labirinta
  37. int m = labirint.size(), n = labirint[0].size();
  38. if (x < 0 || x >= m || y < 0 || y >= n)
  39. continue;
  40. // ako tu nije zid i ako to polje nije posjeceno
  41. if (labirint[x][y] && !posjecen[x][y]) {
  42. // pomjeramo se na to polje, biljezimo da je posjeceno
  43. posjecen[x][y] = true;
  44. // ako od njega postoji put, onda postoji put i od polja (x1, y1)
  45. if (pronadjiPut(labirint, posjecen, x, y, x2, y2))
  46. return true;
  47. }
  48. }
  49. // ni u jednom od 4 moguca smjera nismo uspjeli da stignemo do cilja,
  50. // pa put ne postoji
  51. return false;
  52. }
  53.  
  54. // ispituje da li postoji put kroz labirint od polja (x1, y1) do
  55. // (x2, y2)
  56. bool pronadjiPut(Matrica<bool>& labirint,
  57. int x1, int y1, int x2, int y2) {
  58. // dimenzije labirinta
  59. int m = labirint.size(), n = labirint[0].size();
  60. // ni jedno polje osim starta do sada nije posjeceno
  61. Matrica<bool> posjecen = napraviMatricu(m, n, false);
  62. posjecen[x1][y1] = true;
  63. // pokrecemo rekurzivnu pretragu od startnog polja
  64. return pronadjiPut(labirint, posjecen, x1, y1, x2, y2);
  65. }
  66.  
  67.  
  68. int main(){
  69. Matrica<bool> labirint = {
  70. {false, false, false, false, false,
  71. false, false, false, false, false,
  72. false, false, false, false, false},
  73. {false, true, true, true, true,
  74. true, true, true, true, true,
  75. true, true, true, true, false},
  76. {false, true, false, false, false,
  77. false, false, false, false, false,
  78. false, false, false, false, false},
  79. {false, true, true, true, true,
  80. true, true, true, true, true,
  81. true, true, true, true, false},
  82. {false, false, false, false, false,
  83. false, false, false, false, false,
  84. false, false, false, true, false},
  85. {false, true, true, true, true,
  86. true, true, true, true, true,
  87. true, true, true, true, false},
  88. {false, true, false, false, false,
  89. false, false, false, false, true,
  90. false, false, false, false, false},
  91. {false, true, true, true, true,
  92. true, true, true, true, true,
  93. true, true, true, true, false},
  94. {false, false, false, false, false,
  95. false, false, false, false, false,
  96. false, false, false, false, false}};
  97. cout << "Put izmedju polja (1,1) i (7,13) ";
  98. cout << (pronadjiPut(labirint, 1, 1, 7, 13) ? "" : "ne ");
  99. cout << "postoji" << endl;
  100. return 1;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement