Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // projekt.c -- Projekt -- Prechod bludiskom
- // Martin Sramek, 24.11.2016 10:36:33
- #include <stdio.h>
- int width;
- int height;
- int X;
- int Y;
- char ar[200][200];
- // funkcia kontroluje či nenarazíme do steny
- int Stena(int *x, int *y)
- {
- return ar[*y][*x] == '#';
- }
- // všetky smery posunov
- int Doprava(int *x, int *y)
- {
- // ak je číslo väčšie ako veľkosť pola alebo stena
- if(++(*x) >= width || Stena(x, y))
- {
- (*x)--;
- return 0; // nemôže sa pohnúť
- }
- return 1; // môže sa pohnúť
- }
- int Dole(int *x, int *y)
- {
- if(++(*y) >= height || Stena(x, y))
- {
- (*y)--;
- return 0;
- }
- return 1;
- }
- int Dolava(int *x, int *y)
- {
- if(--(*x) < 0 || Stena(x, y))
- {
- (*x)++;
- return 0;
- }
- return 1;
- }
- int Hore(int *x, int *y)
- {
- if(--(*y) < 0 || Stena(x, y))
- {
- (*y)++;
- return 0;
- }
- return 1;
- }
- // parametre pohybu sú súradnice v ktorých sa nachádzame smer z ktorého sme prišli
- // a koľkatý cyklus vykonávame
- int Pohyb(int x, int y, int smer, int cyklus)
- {
- // aby sme sa nezacyklili v nekonečnej slučke litmit je 200 pohybov
- if(cyklus > 200)
- return 0; // zabíja vetvu
- int i;
- int opacnysmer = (smer+2)%4;
- switch(smer) // smery sú označené číslami 0-3
- {
- case 0:
- if(Doprava(&x, &y) == 0)
- return 0;
- break;
- case 1:
- if(Hore(&x, &y) == 0)
- return 0;
- break;
- case 2:
- if(Dolava(&x, &y) == 0)
- return 0;
- break;
- case 3:
- if(Dole(&x, &y) == 0)
- return 0;
- break;
- }
- // políčko je voľné
- // ak sme vo východe return 1
- if(x == width - 2 && y == height-1)
- {
- ar[y][x] = 'X';
- return 1;
- }
- // inač vytvoriť vetvu do všetkých smerov okrem späť
- for(i=0; i<4; ++i)
- {
- // slúži na to aby sme nešli naspäť na políčko z ktorého sme došli
- if(i != opacnysmer)
- {
- if(Pohyb(x, y, i, cyklus+1))
- {
- ar[y][x] = 'o'; // vykreslí "o" v rekurzii ktorá vrátila 1
- switch(smer)
- {
- case 0:
- Dolava(&x, &y);
- break;
- case 1:
- Dole(&x, &y);
- break;
- case 2:
- Doprava(&x, &y);
- break;
- case 3:
- Hore(&x, &y);
- break;
- }
- return 1;
- }
- }
- }
- return 0;
- }
- int main()
- {
- while(1)
- {
- // načítame bludisko
- for(Y=0; Y<200; ++Y) //max 200x200
- {
- scanf("%s",ar[Y]);
- // načíta až kým nemá nenájde znak "-" alebo kým neskončia bludiská...
- if(ar[Y][0] == '-' || ar[Y][0] == '\0')
- break;
- }
- height = width = Y;
- // hladáme cestu z bodu 1, 0
- if(Pohyb(1,-1,3,0) == 0)
- printf("NEJDE:\n");
- // vykreslíme bludisko
- for(Y=0; Y<height; ++Y)
- {
- printf("%s",ar[Y]);
- printf("\n");
- }
- printf("--------\n");
- // ak nemá čo načítať skončí
- if(ar[Y][0] == '\0')
- break;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement