1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #include <stdio.h>
#include <stdlib.h>
#include "tab2d.h"
char * afficher_lab(Un_tab2d *ptab, char *palette){
int l, c, i, j;
char * cote;
l = ptab->nb_lignes;
c = ptab->nb_colonnes;
cote = malloc((c+2)*sizeof(char));
*cote = '+';
for(j=0; j<c; j++){
cote[j+1] = '-';
}
cote[c+1] = '+';
puts(cote);
for(i=0; i<l; i++){
printf("|");
for(j=0; j<c; j++){
if(PLANTAB2D(ptab, i, j) == 0)
printf("%c",palette[0]);
else if (PLANTAB2D(ptab, i, j) == 1)
printf("%c",palette[1]);
else if (PLANTAB2D(ptab, i, j) == 2)
printf(".");
else printf("%c",palette[0]);
}
puts("|");
}
puts(cote);
}
Un_tab2d *chercher_chemin(Un_tab2d *ptab){
Un_tab2d * dup = copier_tab2d(ptab);
if(recherche_chemin(dup, 0, 0) == 0){
puts("\n\t\t\t\t* PAS DE CHEMIN *");
return NULL;
}
else{
puts("\n\t\t\t *Voici le chemin du labyrinthe*");
affiche_tab(dup);
return dup;
}
}
static int recherche_chemin(Un_tab2d *ptab, int lc, int cc){
if((lc >= ptab->nb_lignes) || (lc < 0) || (cc >= ptab->nb_colonnes) || (cc < 0)) return 0;
if(PLANTAB2D(ptab, lc, cc) != 0) return 0;
if ((lc == ptab->nb_lignes-1) && (cc == ptab->nb_colonnes-1)){
PLANTAB2D(ptab,lc,cc) = 2;
return 1;
}
PLANTAB2D(ptab, lc, cc) = 2;
if(recherche_chemin(ptab, lc, cc+1)) return 1;
if(recherche_chemin(ptab, lc+1, cc)) return 1;
if(recherche_chemin(ptab, lc-1, cc)) return 1;
if(recherche_chemin(ptab, lc, cc-1)) return 1;
PLANTAB2D(ptab, lc, cc) = 3; return 0;
} |
Partager