Advertisement
Guest User

ss

a guest
Jan 20th, 2020
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 4
  4. #define FILENAME "e0_very_very_easy_test_set.txt"
  5.  
  6. typedef enum {false,true} boolean;
  7. int disp_ripet(int pos, int *dispGemme, int *sol, int n, int k, int prec);
  8. int verifica(int *sol, int*dispGemme, int k);
  9.  
  10. int main() {
  11.  
  12. int i, s, k, *sol, numGemme[N], dispGemme[N], maxlun, bestlun, numtestset;
  13. char gemme[N]={'Z','R','T','S'};
  14. FILE *fp=fopen(FILENAME,"r");
  15. if(fp==NULL)
  16. exit(-1);
  17.  
  18. fscanf(fp,"%d",&numtestset);
  19. for (s=0; s<numtestset; s++) {
  20. printf("Test set #%d\n",s+1);
  21. maxlun=0;
  22. for(i=0; i<N; i++){
  23. fscanf(fp,"%d", &numGemme[i]);
  24. maxlun+=numGemme[i];
  25. }
  26. sol=malloc(maxlun* sizeof(int));
  27.  
  28. for(k=1;k<bestlun;k++){
  29. for(i=0;i<N;i++)
  30. dispGemme[i]=numGemme[i];
  31. if(disp_ripet(0,dispGemme,sol,N,k,-1)){
  32. bestlun=k;
  33. }
  34. }
  35. printf("Una soluzione a lunghezza massima %d, e': ",bestlun);
  36. for(i=0;i<bestlun;i++)
  37. printf("%c", gemme[sol[i]]);
  38. printf("\n");
  39. free(sol);
  40. }
  41. fclose(fp);
  42.  
  43. return 0;
  44.  
  45.  
  46. }
  47.  
  48. int disp_ripet(int pos, int *dispGemme, int *sol, int n, int k, int prec) {
  49. int i;
  50. if (pos >= k) {
  51. if(verifica(sol,dispGemme,k))
  52. return 1;
  53. return 0;
  54. }
  55.  
  56. for (i = 0; i < n; i++) {
  57. sol[pos] = i;
  58. if(disp_ripet(pos+1, dispGemme, sol, n, k, pos))
  59. return 1;
  60. }
  61. return 0;
  62. }
  63.  
  64.  
  65. int verifica(int *sol, int*dispGemme, int k){
  66. int i, usGemme[N]={0};
  67.  
  68. for(i=0;i<k;i++){
  69. usGemme[sol[i]]++;
  70. if(usGemme[sol[i]]>dispGemme[sol[i]])
  71. return 0;
  72. if(i!=0){
  73. if(((sol[i-1]==0) || (sol[i-1]==2)) && (sol[i]!=0) && (sol[i]!=1))
  74. return 0;
  75. if(((sol[i-1]==3) || (sol[i-1]==1)) && (sol[i]!=3) && (sol[i]!=2))
  76. return 0;
  77. }
  78. }
  79. return 1;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement