#include #include #include "../include/labyrinth.h" #include "../include/bfs.h" #include "../include/queue.h" #include "../include/coor.h" void bfs(Labyrinth* labyrinth){ int i, j; int arr[4] = {0, 1, 2, 3}, tmp, tp; coor* cor = (coor*)malloc(sizeof(coor)); coor* test; cor->x = labyrinth->start.x; cor->y = labyrinth->start.y; queue(q); queuePush(q, cor); while(!queueIsEmpty(q)){ test = (coor*)q->front->element; i = test->x; j = test->y; queuePop(q); if(i==labyrinth->end.x && j==labyrinth->end.y){ queueFree(q); find_path(labyrinth); return; } if(i!=labyrinth->start.x || j!=labyrinth->start.y) labyrinth->at[i][j].color = GREEN; printLab(labyrinth); labyrinth->at[i][j].visited = true; for(int h=3; h>0; h--){ tmp = rand()%h; tp = arr[h]; arr[h] = arr[tmp]; arr[tmp] = tp; } // goes in the direction if possible for(int h=0; h<4; h++){ coor* cor2 = (coor*)malloc(sizeof(coor)); if(arr[h]==0){ if(i>0 && labyrinth->at[i-1][j].south && !labyrinth->at[i-1][j].visited){ if(i-1!=labyrinth->end.x && j!=labyrinth->end.y) labyrinth->at[i-1][j].color = ORANGE; labyrinth->at[i-1][j].direction = UP; cor2->x = i-1; cor2->y = j; queuePush(q, cor2); } }else if(arr[h]==1){ if(jy_size-1 && labyrinth->at[i][j].east && !labyrinth->at[i][j+1].visited){ if(i!=labyrinth->end.x && j+1!=labyrinth->end.y) labyrinth->at[i][j+1].color = ORANGE; labyrinth->at[i][j+1].direction = RIGHT; cor2->x = i; cor2->y = j+1; queuePush(q, cor2); } }else if(arr[h]==2){ if(iy_size-1 && labyrinth->at[i][j].south && !labyrinth->at[i+1][j].visited){ if(i+1!=labyrinth->end.x && j!=labyrinth->end.y) labyrinth->at[i+1][j].color = ORANGE; labyrinth->at[i+1][j].direction = DOWN; cor2->x = i+1; cor2->y = j; queuePush(q, cor2); } }else if(arr[h]==3){ if(j>0 && labyrinth->at[i][j-1].east && !labyrinth->at[i][j-1].visited){ if(i!=labyrinth->end.x && j-1!=labyrinth->end.y) labyrinth->at[i][j-1].color = ORANGE; labyrinth->at[i][j-1].direction = LEFT; cor2->x = i; cor2->y = j-1; queuePush(q, cor2); } } } } }