Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct tess{
- char c1;
- int v1;
- char c2;
- int v2;
- int r;
- } tess_t;
- int calcola(int nr, int nc, tess_t *t) {
- tess_t tr;
- int i, j, vr=0, k, vc=0;
- char c1, c2;
- for (i=0; i<nr*nc; i+=nc) { //for per le righe
- if (t[i].r) {
- tr.c1=t[i].c2;
- tr.c2=t[i].c1;
- tr.v1=t[i].v2;
- tr.v2=t[i].v1;
- t[i]=tr;
- t[i].r=0;
- }
- if(i%nc==0) {
- for (j=i; j<i+nc; j++) {
- if (j==i) {
- c1=t[j].c1;
- }
- else {
- if (t[j].c1!=c1) break;
- }
- if (j==i+nc-1) {
- for (k=i; k<=j; k++) {
- vr+=t[k].v1;
- }
- }
- }
- }
- }
- for (i=0; i<nr*nc; i+=nr) {
- for(j=i; j<i+nr; j++){
- if(j==0)
- c2=t[i].c2;
- else{
- if(t[i+j].c2 != c2)
- break;
- }
- if(j==i+nr-1) {
- for(k=i; k<=j; k++)
- vc+=t[k].v2;
- }
- }
- }
- printf("calcola");
- return vr + vc;
- }
- int check(int nr, int nc, tess_t *fin, tess_t *temp){
- if(calcola(nr, nc, temp) > calcola(nr, nc, fin)){
- fin = temp;
- //printf("ciao");
- return calcola(nr,nc,fin);
- }
- return 0;
- }
- void max_r(int pos, int *mark, int nr, int nc, tess_t *tessere, tess_t *fin, tess_t *temp) {
- int i, p=0;
- if (pos>=nr*nc) {
- //printf("%d", ++p);
- if(check(nr, nc, fin, temp)){
- //printf("%d\n", calcola(nr,nc,fin));
- return;
- }
- }
- for(i=0; i<nr*nc; i++){
- if(mark[i] == 0){
- mark[i] = 1;
- temp[pos] = tessere[i];
- max_r(pos+1,mark,nr,nc,tessere,fin,temp);
- mark[i] = 0;
- }
- }
- //printf("%d\n", p++);
- return;
- }
- int main()
- {
- FILE *ft, *fb;
- char str[100];
- tess_t *tessere, *sol, *temp;
- int nr, nc, nt, i, *mark, tempt, temptr;
- if ((ft=fopen("tile.txt", "r"))==NULL) return -2;
- if ((fb=fopen("board.txt", "r"))==NULL) return -1;
- fscanf(ft, "%d", &nt);
- printf("%d\n", nt);
- mark=calloc(nt,sizeof(int));
- tessere=(tess_t *) malloc(nt*sizeof(tess_t));
- sol=(tess_t *) malloc(nt*sizeof(tess_t));
- temp=malloc(nt*sizeof(tess_t));
- for (i=0; i<nt; i++) {
- fscanf(ft, "%s",str);
- printf("%s",str);
- sscanf(str,"%c %d %c %d",&tessere[i].c1, &tessere[i].v1, &tessere[i].c2, &tessere[i].v2);
- }
- for (i=0; i<nt; i++) {
- //printf("%c %d %c %d\n", tessere[i].c1, tessere[i].v1, tessere[i].c2, tessere[i].v2);
- }
- fscanf(fb, "%d %d", &nr, &nc);
- for (i=0; i<nr*nc; i++) {
- fscanf(fb, "%d/%d", &tempt, &temptr);
- if (tempt!=-1) {
- mark[tempt]=1;
- sol[i]=tessere[tempt];
- }
- }
- max_r(0,mark,nr, nc, tessere, sol, temp);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement