usaa21/sk2a/README.md

2.1 KiB

//Potkan sa vie pohybovať po štvorcoch hore,dole, doprava i doľava. Bludisko je tvorené štvorcovou mriežkou rozmeru N x N. V bludisku sa nachádzajú prekážky vyznačené 'x'. Potkan pri pohybe nesmie naraziť do žiadnej prekážky. // //Počiatočná pozícia potkana je v ľavom hornom rohu mriežky vyznačená ''. // //Vašou úlohou bude zobraziť optimálnu cestu pre potkana v bludisku. Cestu potkana vyznačte ''. // //Implementujte funkciu: // //int solve_maze(char* maze,int size); //maze je jednorozmerné pole do ktorého je uložená mriežka po riadkoch za sebou. Na začiatku poľa sa nachádza prvý riadok mriežky, za ním nasleduje druhý a tak ďalej. Spolu sa v poli maze nachádza size * size znakov. // //Vašou úlohou bude modifikovať pole maze tak, aby ste v ňom vyznačili cestu z bludiska čo sa nachádza v pravom dolnom rohu bludiska. //hladam najlepsiu cenu na koniec, pravy dolny roh #include <stdio.h> #include <string.h> #include "maze.h" #include <assert.h>

int issafe(char* maze, int x, int y, int size) { if ((x >= 0 && x < size) && (y >= 0 && y < size) && (maze[x * size + y] == ' ')){ return 1; } return 0; }

int backtracking(char* maze, int x, int y, int size){ //https://www.geeksforgeeks.org/rat-in-a-maze-backtracking-2/ if(x == size - 1 && y == size - 1 && maze[x * size + y] == ' '){ //kontrola ci sa nachadzam na konci maze[x * size + y] = '*'; return 1; }

if(issafe(maze, x, y, size) == 1) {												// znazornenie stien
    maze[x * size + y] = '*';

    if (backtracking(maze, x, y + 1, size) == 1) {								//pohyb doprava
        return 1;
    }
    if (backtracking(maze, x + 1, y, size) == 1) {								//pohyb dole
        return 1;
    }
    if (backtracking(maze, x - 1, y, size) == 1) {								//pohyb dol
	
        return 1;
    }
    if (backtracking(maze, x, y - 1, size) == 1) {								//pohyb hore
        return 1;
    }
    maze[x * size + y] = ' ';
}
return 0;

}

int solve_maze(char* maze, int size) { return backtracking(maze, 0, 0, size); //volanie funkcie }