#include #include #include #include "../include/depthFirst.h" void depthFirst_r(int i, int j, Labyrinth* labyrinth, bool show); // dfs search algorithm Labyrinth* depthFirst(int n, int m){ Labyrinth* labyrinth = newLabyrinth(n, m); depthFirst_r(rand()%n, rand()%m, labyrinth, false); resetLabyrinth(labyrinth); return labyrinth; } Labyrinth* depthFirstShow(int n, int m){ Labyrinth* labyrinth = newLabyrinth(n, m); depthFirst_r(rand()%n, rand()%m, labyrinth, true); resetLabyrinth(labyrinth); return labyrinth; } // ricursive function used by depthFirst void depthFirst_r(int i, int j, Labyrinth* labyrinth, bool show){ labyrinth->at[i][j].visited = 1; labyrinth->at[i][j].dp = -1; if(show){ labyrinth->at[i][j].color = ORANGE; printLab(labyrinth); labyrinth->at[i][j].color = WHITE; } int arr[4] = {0, 1, 2, 3}, tmp, tp; for(int h=3; h>0; h--){ tmp = rand()%h; tp = arr[h]; arr[h] = arr[tmp]; arr[tmp] = tp; } for(int h=0; h<4; h++){ if(arr[h]==0){ if(i>0 && !labyrinth->at[i-1][j].visited){ labyrinth->at[i-1][j].south = 1; depthFirst_r(i-1, j, labyrinth, show); } }else if(arr[h]==1){ if(jy_size-1 && !labyrinth->at[i][j+1].visited){ labyrinth->at[i][j].east = 1; depthFirst_r(i, j+1, labyrinth, show); } }else if(arr[h]==2){ if(ix_size-1 && !labyrinth->at[i+1][j].visited){ labyrinth->at[i][j].south = 1; depthFirst_r(i+1, j, labyrinth, show); } }else if(arr[h]==3){ if(j>0 && !labyrinth->at[i][j-1].visited){ labyrinth->at[i][j-1].east = 1; depthFirst_r(i, j-1, labyrinth, show); } } } if(show){ labyrinth->at[i][j].color = ORANGE; printLab(labyrinth); labyrinth->at[i][j].color = WHITE; } }