Soyez le premier à donner votre avis sur cette source.
Snippet vu 6 110 fois - Téléchargée 36 fois
/* création de fichier include pour POV-Ray de défnition de labyrinthe par la méthode des ensembles de Tarjan*/ #include <stdio.h> typedef enum{false, true}bool; #define largeur 13 #define hauteur 14 bool murs[largeur+1][hauteur+1][2]; // 0: horizontal, 1: vertical bool done[largeur+1][hauteur+1][2]; // > 0:horizontal, 1:vertical bool possible(int departx, int departy, int arriveex, int arriveey, int code) { if ((departx==arriveex) && (departy==arriveey)) return true; else { // en haut if (code!= 2) { if ((murs[departx][departy][0]==0) && (departy-1>=0)) if (possible(departx, departy-1, arriveex, arriveey, 1)) return true; } // en bas if (code!=1) { if ((murs[departx][departy+1][0]==0) && (departy+1<hauteur)) if (possible(departx, departy+1, arriveex, arriveey, 2)) return true; } // à droite if (code!=4) { if ((murs[departx+1][departy][1]==0) && (departx+1<largeur)) if (possible(departx+1, departy, arriveex, arriveey, 3)) return true; } // à gauche if (code!=3) { if ((murs[departx][departy][1]==0) && (departx-1>=0)) if (possible(departx-1, departy, arriveex, arriveey, 4)) return true; } return false; } } main() { int i,j,k; // initialisation du tableau à 1, on met des murs partout for (i=0; i<largeur+1; i++) for (j=0; j<hauteur+1; j++) for (k=0; k<2; k++) { murs[i][j][k]=1; done[i][j][k]=0; } srand(time(NULL)); unsigned long a_faire=(largeur-1)*hauteur+(hauteur-1)*largeur; bool choix; unsigned long nb_done=0; while (nb_done!=a_faire) { //on choisit un mur vertical ou horizontal // i : abscisse // j : ordoonée do { choix=rand()%2; if (choix==0) { j=1+rand()%(hauteur-1); i=rand()%largeur; } else { j=rand()%hauteur; i=1+rand()%(largeur-1); } } while (done[i][j][choix]==1); // on teste le mur i,j,choix if (choix==0) { if (!possible(i,j,i,j-1,0)) murs[i][j][0]=0; done[i][j][0]=1; } if (choix==1) { if (!possible(i,j,i-1,j,0)) murs[i][j][1]=0; done[i][j][1]=1; } nb_done++; } // while pour tout le tableau FILE *fichier=fopen("labyrinthe.inc", "w"); fprintf(fichier, "union{\n"); for (i=0; i<largeur; i++) for (j=0; j<hauteur+1; j++) { if (((i==0) && (j==0)) || ((i==largeur-1) && (j==hauteur))) continue; if (murs[i][j][0]) fprintf(fichier, "box{<%d,0,%2.1f>, <%d,1,%2.1f>}\n",i,j-.1, i+1,j+.1); } for (i=0; i<largeur+1; i++) for (j=0; j<hauteur; j++) { if (murs[i][j][1]) fprintf(fichier, "box{<%2.1f,0,%d>, <%2.1f,1,%d>}\n",i-.1,j,i+.1,j+1); } fprintf(fichier, "pigment{Red}\n"); fprintf(fichier,"}\n"); fclose(fichier); }
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.