Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct tess{
  5. char c1;
  6. int v1;
  7. char c2;
  8. int v2;
  9. int r;
  10. } tess_t;
  11.  
  12. int calcola(int nr, int nc, tess_t *t) {
  13. tess_t tr;
  14. int i, j, vr=0, k, vc=0;
  15. char c1, c2;
  16. for (i=0; i<nr*nc; i+=nc) { //for per le righe
  17. if (t[i].r) {
  18. tr.c1=t[i].c2;
  19. tr.c2=t[i].c1;
  20. tr.v1=t[i].v2;
  21. tr.v2=t[i].v1;
  22. t[i]=tr;
  23. t[i].r=0;
  24. }
  25. if(i%nc==0) {
  26. for (j=i; j<i+nc; j++) {
  27. if (j==i) {
  28. c1=t[j].c1;
  29. }
  30. else {
  31. if (t[j].c1!=c1) break;
  32. }
  33. if (j==i+nc-1) {
  34. for (k=i; k<=j; k++) {
  35. vr+=t[k].v1;
  36. }
  37. }
  38. }
  39. }
  40. }
  41.  
  42. for (i=0; i<nr*nc; i+=nr) {
  43. for(j=i; j<i+nr; j++){
  44. if(j==0)
  45. c2=t[i].c2;
  46. else{
  47. if(t[i+j].c2 != c2)
  48. break;
  49. }
  50. if(j==i+nr-1) {
  51. for(k=i; k<=j; k++)
  52. vc+=t[k].v2;
  53. }
  54. }
  55. }
  56. printf("calcola");
  57. return vr + vc;
  58. }
  59. int check(int nr, int nc, tess_t *fin, tess_t *temp){
  60. if(calcola(nr, nc, temp) > calcola(nr, nc, fin)){
  61. fin = temp;
  62. //printf("ciao");
  63. return calcola(nr,nc,fin);
  64. }
  65. return 0;
  66. }
  67. void max_r(int pos, int *mark, int nr, int nc, tess_t *tessere, tess_t *fin, tess_t *temp) {
  68. int i, p=0;
  69. if (pos>=nr*nc) {
  70. //printf("%d", ++p);
  71. if(check(nr, nc, fin, temp)){
  72. //printf("%d\n", calcola(nr,nc,fin));
  73. return;
  74. }
  75. }
  76. for(i=0; i<nr*nc; i++){
  77. if(mark[i] == 0){
  78. mark[i] = 1;
  79. temp[pos] = tessere[i];
  80. max_r(pos+1,mark,nr,nc,tessere,fin,temp);
  81. mark[i] = 0;
  82. }
  83. }
  84. //printf("%d\n", p++);
  85.  
  86. return;
  87. }
  88.  
  89. int main()
  90. {
  91. FILE *ft, *fb;
  92. char str[100];
  93. tess_t *tessere, *sol, *temp;
  94. int nr, nc, nt, i, *mark, tempt, temptr;
  95. if ((ft=fopen("tile.txt", "r"))==NULL) return -2;
  96. if ((fb=fopen("board.txt", "r"))==NULL) return -1;
  97. fscanf(ft, "%d", &nt);
  98. printf("%d\n", nt);
  99. mark=calloc(nt,sizeof(int));
  100. tessere=(tess_t *) malloc(nt*sizeof(tess_t));
  101. sol=(tess_t *) malloc(nt*sizeof(tess_t));
  102. temp=malloc(nt*sizeof(tess_t));
  103. for (i=0; i<nt; i++) {
  104. fscanf(ft, "%s",str);
  105. printf("%s",str);
  106. sscanf(str,"%c %d %c %d",&tessere[i].c1, &tessere[i].v1, &tessere[i].c2, &tessere[i].v2);
  107. }
  108. for (i=0; i<nt; i++) {
  109. //printf("%c %d %c %d\n", tessere[i].c1, tessere[i].v1, tessere[i].c2, tessere[i].v2);
  110. }
  111. fscanf(fb, "%d %d", &nr, &nc);
  112. for (i=0; i<nr*nc; i++) {
  113. fscanf(fb, "%d/%d", &tempt, &temptr);
  114. if (tempt!=-1) {
  115. mark[tempt]=1;
  116. sol[i]=tessere[tempt];
  117. }
  118. }
  119. max_r(0,mark,nr, nc, tessere, sol, temp);
  120.  
  121. return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement