Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define N 4
- #define FILENAME "e0_very_very_easy_test_set.txt"
- typedef enum {false,true} boolean;
- int disp_ripet(int pos, int *dispGemme, int *sol, int n, int k, int prec);
- int verifica(int *sol, int*dispGemme, int k);
- int main() {
- int i, s, k, *sol, numGemme[N], dispGemme[N], maxlun, bestlun, numtestset;
- char gemme[N]={'Z','R','T','S'};
- FILE *fp=fopen(FILENAME,"r");
- if(fp==NULL)
- exit(-1);
- fscanf(fp,"%d",&numtestset);
- for (s=0; s<numtestset; s++) {
- printf("Test set #%d\n",s+1);
- maxlun=0;
- for(i=0; i<N; i++){
- fscanf(fp,"%d", &numGemme[i]);
- maxlun+=numGemme[i];
- }
- sol=malloc(maxlun* sizeof(int));
- for(k=1;k<bestlun;k++){
- for(i=0;i<N;i++)
- dispGemme[i]=numGemme[i];
- if(disp_ripet(0,dispGemme,sol,N,k,-1)){
- bestlun=k;
- }
- }
- printf("Una soluzione a lunghezza massima %d, e': ",bestlun);
- for(i=0;i<bestlun;i++)
- printf("%c", gemme[sol[i]]);
- printf("\n");
- free(sol);
- }
- fclose(fp);
- return 0;
- }
- int disp_ripet(int pos, int *dispGemme, int *sol, int n, int k, int prec) {
- int i;
- if (pos >= k) {
- if(verifica(sol,dispGemme,k))
- return 1;
- return 0;
- }
- for (i = 0; i < n; i++) {
- sol[pos] = i;
- if(disp_ripet(pos+1, dispGemme, sol, n, k, pos))
- return 1;
- }
- return 0;
- }
- int verifica(int *sol, int*dispGemme, int k){
- int i, usGemme[N]={0};
- for(i=0;i<k;i++){
- usGemme[sol[i]]++;
- if(usGemme[sol[i]]>dispGemme[sol[i]])
- return 0;
- if(i!=0){
- if(((sol[i-1]==0) || (sol[i-1]==2)) && (sol[i]!=0) && (sol[i]!=1))
- return 0;
- if(((sol[i-1]==3) || (sol[i-1]==1)) && (sol[i]!=3) && (sol[i]!=2))
- return 0;
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement