int sequence_aleatoire_imp(int **M, Grille *G, int dim, int aff){ /* initialisation du tableau de couleurs dans la grille */ int *tab = initialise_tab_couleur(G->nbcl); nb_couleur_initiales(&tab,M,G->dim); int nbCoups = 0; srand(time(NULL)); /* On definit Zsg, la zone contenant la case situee en haut a gauche */ Liste L; init_liste(&L); int taille = 0; int new_couleur; int couleur = M[0][0]; int nbcl = cpt_couleur(tab,G->nbcl); trouve_zone_imp(M, dim, 0, 0, &taille, &L); printf("Couleur initiale : %d \n",couleur); /* selectionne une couleur tant que la grille contient plus d'une couleur */ do{ do{ new_couleur = (int)(rand()%(G->nbcl)); } while(tab[new_couleur] == 0); /* si la couleur selectionnee est differente de la couleur de Zsg */ if(new_couleur != couleur){ tab[couleur] -= taille; couleur = new_couleur; tab[couleur] += taille; peint(G,couleur,M,&L); /* on peint toute les cases avec la nouvelle couleur, puis on effectue une nouvelle recherche afin de voir si notre zone possede de nouvelles cases */ detruit_liste(&L); taille = 0; trouve_zone_imp(M,dim,0,0,&taille,&L); peint(G,couleur,M,&L); nbcl = cpt_couleur(tab,G->nbcl); nbCoups++; if(aff == 1){ //Grille_attente_touche(); Grille_redessine_Grille(); } if(aff == 2){ affiche_liste(&L); Grille_attente_touche(); Grille_redessine_Grille(); } } }while(nbcl > 1); printf("Couleur finale : %d\n", couleur); // printf("nbCoups = %d\n", nbCoups); return nbCoups; }
int sequence_aleatoire_rapide(int **M, Grille *G, int aff) { /* initialisation de Zsg */ Liste Lzsg; init_liste(&Lzsg); Liste *B = (Liste*)malloc((G->nbcl)*sizeof(Liste)); int **App = (int**)malloc((G->dim)*sizeof(int*)); int i, j; int k = 0; int l = 0; for (i = 0; i < G->dim; i++){ App[i] = malloc((G->dim)*sizeof(int)); } for(i = 0; i < G->dim; i++){ for(j = 0; j < G->dim; j++) App[i][j] = -2; } for (i = 0; i < G->nbcl; i++) init_liste(&B[i]); S_Zsg zone = init_zsg(G->dim, G->nbcl, Lzsg, B, App); int couleur = M[0][0]; printf("couleur initiale : %d\n", couleur); int *tab = initialise_tab_couleur(G->nbcl); nb_couleur_initiales(&tab,M,G->dim); int new_couleur; int nbCoups = 0; int nbcl = G->nbcl; int taille; taille = agrandit_zsg(M, &zone, couleur, 0, 0); if(aff == 1){ //Grille_attente_touche(); Grille_redessine_Grille(); } if(aff == 2){ affiche_liste(&(zone.Lzsg)); Grille_attente_touche(); Grille_redessine_Grille(); } Elnt_liste *actu; do{ plus_grd_cl(zone,G,&k,&l); couleur = M[k][l]; actu = B[couleur]; tab[M[0][0]] -= taille; tab[couleur] += taille; while(actu != NULL){ taille += agrandit_zsg(M,&zone,couleur,actu->i,actu->j); actu = actu->suiv; } detruit_liste(&(zone.B[couleur])); peint(G,couleur,M,&(zone.Lzsg)); nbcl = cpt_couleur(tab,G->nbcl); nbCoups++; if(aff == 1){ //Grille_attente_touche(); Grille_redessine_Grille(); } if(aff == 2){ affiche_liste(&(zone.Lzsg)); Grille_attente_touche(); Grille_redessine_Grille(); } }while(nbcl > 1); printf("Couleur finale : %d\n", couleur); //printf("nbCoups = %d\n", nbCoups); return nbCoups; }
int main(int argc,char**argv) { int dim, nbcl, nivdif, graine; Grille *G; int i,j; int **M; clock_t temps_initial, /* Temps initial en micro-secondes */ temps_final; /* Temps final en micro-secondes */ float temps_cpu; /* Temps total en secondes */ if(argc!=5) { printf("usage: %s <dimension nb_de_couleurs niveau_difficulte graine>\n",argv[0]); return 1; } dim=atoi(argv[1]); nbcl=atoi(argv[2]); nivdif=atoi(argv[3]); graine=atoi(argv[4]); /* Generation de l'instance */ M=(int **) malloc(sizeof(int*)*dim); for (i=0; i<dim; i++) { M[i]=(int*) malloc(sizeof(int)*dim); if (M[i]==0) printf("Pas assez d'espace mémoire disponible\n"); } int choix, aff, nbCoups; int fin = 0; do { printf("----------------------Menu----------------------\n"); printf("0 - SANS affichage graphique\n"); printf("1 - AVEC affichage graphique\n"); printf("3 - Quitter\n\n"); printf("Note: si la dimension entrée est inférieure à 6\non peut visualiser les étapes du jeu et le graphe\nau format texte.\n"); printf("Choix : "); scanf("%d", &aff); } while (aff != 0 && aff != 1 && aff != 3); if (aff == 3) return 0; if (dim < 6) aff = 2; printf("\n----------------------Menu----------------------\n"); printf("1 - Version recursive\n"); printf("2 - Version imperative\n"); printf("3 - Version rapide\n"); printf("4 - Max-bordure\n"); printf("5 - Parcours en largeur\n"); printf("6 - Essai strat perso \n"); printf("Strategie : "); scanf("%d", &choix); printf("\n-------------------------------------------------\n"); Gene_instance_genere_matrice(dim, nbcl, nivdif, graine, M); //Affichage de la grille Grille_init(dim,nbcl, 500,&G); Grille_ouvre_fenetre(G); for (i=0; i<dim; i++) for (j=0; j<dim; j++) { Grille_attribue_couleur_case(G,i,j,M[i][j]); } switch(choix) { case 1: temps_initial = clock(); nbCoups = sequence_aleatoire_rec_2(M,G,G->dim,aff); temps_final = clock(); temps_cpu = ((double)(temps_final - temps_initial))/CLOCKS_PER_SEC; printf("Nombre de coups:%d\nTemps CPU:%f\n", nbCoups, temps_cpu); temps_initial = 0; temps_final = 0; temps_cpu = 0.0; break; case 2: temps_initial = clock(); nbCoups = sequence_aleatoire_imp(M,G,G->dim,aff); temps_final = clock(); temps_cpu = ((double)(temps_final - temps_initial))/CLOCKS_PER_SEC; printf("Nombre de coups:%d\nTemps CPU:%f\n", nbCoups, temps_cpu); temps_initial = 0; temps_final = 0; temps_cpu = 0.0; break; case 3: //FILE *f1 = fopen("01_rec_num.txt", "a+"); //temps calcul et l'écrit dans un fichier temps_initial = clock(); nbCoups = sequence_aleatoire_rapide(M,G,aff); temps_final = clock(); temps_cpu = ((double)(temps_final - temps_initial))/CLOCKS_PER_SEC; printf("Nombre de coups:%d\nTemps CPU:%f\n", nbCoups, temps_cpu); temps_initial = 0; temps_final = 0; temps_cpu = 0.0; // fclose(f1); break; case 4: temps_initial = clock(); nbCoups = max_bordure(G, M, aff); temps_final = clock(); temps_cpu = ((double)(temps_final - temps_initial))/CLOCKS_PER_SEC; printf("Nombre de coups:%d\nTemps CPU:%f\n", nbCoups, temps_cpu); temps_initial = 0; temps_final = 0; temps_cpu = 0.0; break; case 5: temps_initial = clock(); nbCoups = chemin(G,M,aff); temps_final = clock(); temps_cpu = ((double)(temps_final - temps_initial))/CLOCKS_PER_SEC; printf("Nombre de coups:%d\nTemps CPU:%f\n", nbCoups, temps_cpu); temps_initial = 0; temps_final = 0; temps_cpu = 0.0; break; case 6: temps_initial = clock(); nbCoups = chemin2(G,M,aff); temps_final = clock(); temps_cpu = ((double)(temps_final - temps_initial))/CLOCKS_PER_SEC; printf("Nombre de coups:%d\nTemps CPU:%f\n", nbCoups, temps_cpu); temps_initial = 0; temps_final = 0; temps_cpu = 0.0; break; default: printf("Erreur de saisie\n"); return 1; break; } Grille_redessine_Grille(); if (aff != 0) Grille_attente_touche(); Grille_ferme_fenetre(); Grille_free(&G); return 0; }
int main(int argc,char**argv) { int nbcase, nbcl, nivdif, graine, i, j; int **M; Grille *G; // clock_t // temps_initial, // Temps initial en micro-secondes // temps_final; // Temps final en micro-secondes // float temps_cpu; // Temps total en secondes if (argc != 5) { printf("usage: %s <nb_de_case nb_de_couleurs niveau_difficulte graine>\n",argv[0]); return 1; } //Recuperation des arguments sscanf(argv[1], "%d", &nbcase); sscanf(argv[2], "%d", &nbcl); sscanf(argv[3], "%d", &nivdif); sscanf(argv[4], "%d", &graine); /* Generation de l'instance */ M=(int **) malloc(sizeof(int*)*nbcase); if(M==NULL) exit(EXIT_FAILURE); for (i=0;i<nbcase;i++) { M[i]=(int*) malloc(sizeof(int)*nbcase); if (M[i]==0) printf("OUCH\n"); } Gene_instance_genere_matrice(nbcase, nbcl, nivdif, graine, M); /* Affichage de la grille */ Grille_init(nbcase,nbcl, 500,&G); Grille_ouvre_fenetre(G); for (i=0;i<nbcase; i++ ) for (j=0;j<nbcase;j++) Grille_chg_case(G,i,j,M[i][j]); Grille_redessine_Grille(); // Grille_attente_touche(); int menuchoix; do { printf("Flood-it: menu\n"); printf("1 Strategie recursive\n"); printf("2 Strategie iterative\n"); printf("3 Strategie rapide\n"); printf("4 Strategie max-bordures\n"); printf("5 Strategie largeur\n\n"); printf("0 Quitter\n"); printf(">> "); scanf("%d", &menuchoix); switch (menuchoix) { case 1: Gene_instance_genere_matrice(nbcase, nbcl, nivdif, graine, M); Grille_init(nbcase,nbcl, 500,&G); Grille_ouvre_fenetre(G); for (i=0;i<nbcase; i++ ) for (j=0;j<nbcase;j++) Grille_chg_case(G,i,j,M[i][j]); printf("%d iterations au total\n", strategie_aleatoire_rec(G, M, nbcase, nbcl)); Grille_redessine_Grille(); Grille_attente_touche(); Grille_ferme_fenetre(); Grille_free(&G); break; case 2: Gene_instance_genere_matrice(nbcase, nbcl, nivdif, graine, M); Grille_init(nbcase,nbcl, 500,&G); Grille_ouvre_fenetre(G); for (i=0;i<nbcase; i++ ) for (j=0;j<nbcase;j++) Grille_chg_case(G,i,j,M[i][j]); printf("%d iterations au total\n", strategie_aleatoire_imp(G, M, nbcase, nbcl)); Grille_redessine_Grille(); Grille_attente_touche(); Grille_ferme_fenetre(); Grille_free(&G); break; case 3: Gene_instance_genere_matrice(nbcase, nbcl, nivdif, graine, M); Grille_init(nbcase,nbcl, 500,&G); Grille_ouvre_fenetre(G); for (i=0;i<nbcase; i++ ) for (j=0;j<nbcase;j++) Grille_chg_case(G,i,j,M[i][j]); printf("%d iterations au total\n", strategie_aleatoire_rapide(G, M, nbcase, nbcl)); Grille_redessine_Grille(); Grille_attente_touche(); Grille_ferme_fenetre(); Grille_free(&G); break; case 4: Gene_instance_genere_matrice(nbcase, nbcl, nivdif, graine, M); Grille_init(nbcase,nbcl, 500,&G); Grille_ouvre_fenetre(G); for (i=0;i<nbcase; i++ ) for (j=0;j<nbcase;j++) Grille_chg_case(G,i,j,M[i][j]); printf("%d iterations au total\n", maxBordure(G, M, nbcase)); Grille_redessine_Grille(); Grille_attente_touche(); Grille_ferme_fenetre(); Grille_free(&G); break; case 5: Gene_instance_genere_matrice(nbcase, nbcl, nivdif, graine, M); Grille_init(nbcase,nbcl, 500,&G); Grille_ouvre_fenetre(G); for (i=0;i<nbcase; i++ ) for (j=0;j<nbcase;j++) Grille_chg_case(G,i,j,M[i][j]); printf("%d iterations au total\n", StrategieLarge(G, M, nbcase)); Grille_redessine_Grille(); Grille_attente_touche(); Grille_ferme_fenetre(); Grille_free(&G); case 0: break; default: printf("choix?\n\n"); } } while (menuchoix < 0 || menuchoix > 4 || menuchoix != 0); // Grille_redessine_Grille(); // Grille_attente_touche(); // while(1); // Grille_ferme_fenetre(); // Grille_free(&G); return 0; }