that_one_nigga_you_k

labirinto tunadasso

Jun 10th, 2024
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <random>
  4. #include <algorithm>
  5. #include <fstream>
  6. #include <stack>
  7. #include <queue>
  8.  
  9. using namespace std;
  10.  
  11. void gerarCaminhoDFS(vector<vector<char>>& layout, int startX, int startY, ofstream& iterationFile) {
  12.     vector<pair<int, int>> directions = {{-2, 0}, {2, 0}, {0, -2}, {0, 2}};
  13.     random_device rd;
  14.     mt19937 g(rd());
  15.  
  16.     stack<pair<int, int>> s;
  17.     s.push({startX, startY});
  18.  
  19.     int largura, comprimento;
  20.  
  21.     largura = layout.size();
  22.     comprimento = layout[1].size();
  23.  
  24.     while (!s.empty()) {
  25.         auto [x, y] = s.top();
  26.         s.pop();
  27.  
  28.         shuffle(directions.begin(), directions.end(), g);
  29.  
  30.         for (auto& dir : directions) {
  31.             int nx = x + dir.first;
  32.             int ny = y + dir.second;
  33.  
  34.             if (nx > 0 && nx < layout.size() - 1 && ny > 0 && ny < layout[0].size() - 1 && layout[nx][ny] == '|') {
  35.                 layout[nx][ny] = ' ';
  36.                 layout[x + dir.first / 2][y + dir.second / 2] = ' ';
  37.                 s.push({nx, ny});
  38.             }
  39.  
  40.             // escreve as iterações da geração em outro txt
  41.             for (int i = 0; i < largura; i++) {
  42.                 for (int j = 0; j < comprimento; j++) {
  43.                     iterationFile << layout[i][j] << " ";
  44.                 }
  45.                 iterationFile << endl;
  46.             }
  47.             iterationFile << endl;
  48.         }
  49.     }
  50. }
  51.  
  52. void gerarCaminhoBFS(vector<vector<char>>& layout, int startX, int startY, ofstream& iterationFile) {
  53.     vector<pair<int, int>> directions = {{-2, 0}, {2, 0}, {0, -2}, {0, 2}};
  54.     random_device rd;
  55.     mt19937 g(rd());
  56.  
  57.     queue<pair<int, int>> q;
  58.     q.push({startX, startY});
  59.  
  60.     int largura, comprimento;
  61.  
  62.     largura = layout.size();
  63.     comprimento = layout[1].size();
  64.  
  65.     while (!q.empty()) {
  66.         auto [x, y] = q.front();
  67.         q.pop();
  68.  
  69.         shuffle(directions.begin(), directions.end(), g);
  70.  
  71.         for (auto& dir : directions) {
  72.             int nx = x + dir.first;
  73.             int ny = y + dir.second;
  74.  
  75.             if (nx > 0 && nx < layout.size() - 1 && ny > 0 && ny < layout[0].size() - 1 && layout[nx][ny] == '|') {
  76.                 layout[nx][ny] = ' ';
  77.                 layout[x + dir.first / 2][y + dir.second / 2] = ' ';
  78.                 q.push({nx, ny});
  79.             }
  80.  
  81.             // imprime as iterações
  82.             for (int i = 0; i < largura; i++) {
  83.                 for (int j = 0; j < comprimento; j++) {
  84.                     iterationFile << layout[i][j] << " ";
  85.                 }
  86.                 iterationFile << endl;
  87.             }
  88.             iterationFile << endl;
  89.         }
  90.     }
  91. }
  92.  
  93. int main() {
  94.     //altura e largura
  95.     int largura = 59;
  96.     int comprimento = 59;
  97.  
  98.     // enche de paredes
  99.     vector<vector<char>> layoutBFS(largura, vector<char>(comprimento, '|'));
  100.     vector<vector<char>> layoutDFS(largura, vector<char>(comprimento, '|'));
  101.  
  102.     random_device rd;
  103.     mt19937 g(rd());
  104.     int entrada = rand() % (comprimento - 2) + 1;
  105.     int saida = rand() % (comprimento - 2) + 1;
  106.  
  107.     ofstream iterationFileBFS("iteracoes_gerarCaminhoBFS.txt");
  108.     if (!iterationFileBFS.is_open()) {
  109.         cout << "Faiô.txt" << endl;
  110.         return 1;
  111.     }
  112.  
  113.     ofstream iterationFileDFS("iteracoes_gerarCaminhoDFS.txt");
  114.     if (!iterationFileDFS.is_open()) {
  115.         cout << "Faiô.txt" << endl;
  116.         return 1;
  117.     }
  118.  
  119.     // definir o começo
  120.     layoutBFS[0][entrada] = ' ';
  121.     gerarCaminhoBFS(layoutBFS, 1, entrada, iterationFileBFS);
  122.     iterationFileBFS.close();
  123.  
  124.     layoutDFS[0][entrada] = ' ';
  125.     gerarCaminhoDFS(layoutDFS, 1, entrada, iterationFileDFS);
  126.     iterationFileDFS.close();
  127.  
  128.     vector<int> possibilidades_saidaBFS;
  129.  
  130.     for (int i = 0; i < comprimento; i++) {
  131.         if (layoutBFS[largura - 2][i] == ' ') {
  132.             possibilidades_saidaBFS.push_back(i);
  133.         }
  134.     }
  135.  
  136.     if (!possibilidades_saidaBFS.empty()) {
  137.         saida = possibilidades_saidaBFS[rand() % possibilidades_saidaBFS.size()];
  138.         layoutBFS[largura - 1][saida] = ' ';
  139.     }
  140.  
  141.     vector<int> possibilidades_saidaDFS;
  142.  
  143.     for (int i = 0; i < comprimento; i++) {
  144.         if (layoutDFS[largura - 2][i] == ' ') {
  145.             possibilidades_saidaDFS.push_back(i);
  146.         }
  147.     }
  148.  
  149.     if (!possibilidades_saidaDFS.empty()) {
  150.         saida = possibilidades_saidaDFS[rand() % possibilidades_saidaDFS.size()];
  151.         layoutDFS[largura - 1][saida] = ' ';
  152.     }
  153.  
  154.     // ver o resultado
  155.     for (int i = 0; i < largura; i++) {
  156.         for (int j = 0; j < comprimento; j++) {
  157.             cout << layoutBFS[i][j] << " ";
  158.         }
  159.         cout << endl;
  160.     }
  161.    
  162.     cout<<endl;
  163.  
  164.     for (int i = 0; i < largura; i++) {
  165.         for (int j = 0; j < comprimento; j++) {
  166.             cout << layoutDFS[i][j] << " ";
  167.         }
  168.         cout << endl;
  169.     }
  170.  
  171.     // Write the labyrinth layoutBFS to a file
  172.     ofstream outputFileBFS("labirintoBFS.txt");
  173.     if (outputFileBFS.is_open()) {
  174.         for (int i = 0; i < largura; i++) {
  175.             for (int j = 0; j < comprimento; j++) {
  176.                 outputFileBFS << layoutBFS[i][j] << " ";
  177.             }
  178.             outputFileBFS << endl;
  179.         }
  180.         outputFileBFS.close();
  181.         cout << "Labirinto criado lá no labirinto.txt" << endl;
  182.     } else {
  183.         cout << "criacionismo falhou." << endl;
  184.     }
  185.  
  186.  
  187.     ofstream outputFileDFS("labirintoDFS.txt");
  188.     if (outputFileDFS.is_open()) {
  189.         for (int i = 0; i < largura; i++) {
  190.             for (int j = 0; j < comprimento; j++) {
  191.                 outputFileDFS << layoutDFS[i][j] << " ";
  192.             }
  193.             outputFileDFS << endl;
  194.         }
  195.         outputFileDFS.close();
  196.         cout << "Labirinto criado lá no labirinto.txt" << endl;
  197.     } else {
  198.         cout << "criacionismo falhou." << endl;
  199.     }
  200.  
  201.     return 0;
  202. }
  203.  
Add Comment
Please, Sign In to add comment