that_one_nigga_you_k

labirinto euclidiano

Jun 10th, 2024
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <random>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. void gerarCaminho(vector<vector<char>>& layout, int x, int y) {
  9.     // mover pra cima, baixo, esquerda e direita
  10.     vector<pair<int, int>> directions = {{-2, 0}, {2, 0}, {0, -2}, {0, 2}};
  11.     random_device rd;
  12.     mt19937 g(rd());
  13.     shuffle(directions.begin(), directions.end(), g);
  14.  
  15.     // tenta criar um caminho nas 4 direções
  16.     for (auto& dir : directions) {
  17.         int nx = x + dir.first;
  18.         int ny = y + dir.second;
  19.  
  20.         // Checa se está dentro das paredes
  21.         if (nx > 0 && nx < layout.size() - 1 && ny > 0 && ny < layout[0].size() - 1 && layout[nx][ny] == '|') {
  22.             // troca as paredes por corredores
  23.             layout[nx][ny] = ' ';
  24.             layout[x + dir.first / 2][y + dir.second / 2] = ' ';
  25.  
  26.             // gerar as posições recursivamente
  27.             gerarCaminho(layout, nx, ny);
  28.         }
  29.     }
  30. }
  31.  
  32. int main() {
  33.     //altura e largura
  34.     int largura = 49;
  35.     int comprimento = 49;
  36.  
  37.     // enche de paredes
  38.     vector<vector<char>> layout(largura, vector<char>(comprimento, '|'));
  39.  
  40.     // definir o começo
  41.     layout[1][1] = ' ';
  42.  
  43.     // começar a gerar o caminho a partir do começo
  44.  
  45.     gerarCaminho(layout, 1, 1);
  46.  
  47.     // ver o resultado
  48.     for (int i = 0; i < largura; i++) {
  49.         for (int j = 0; j < comprimento; j++) {
  50.             cout << layout[i][j] << " ";
  51.         }
  52.         cout << endl;
  53.     }
  54.  
  55.     return 0;
  56. }
Add Comment
Please, Sign In to add comment