Buongiorno,
sto cercando di risolvere il problema Domino massimale.
Purtroppo faccio 0/100. Ho qualche difficoltà a capire quale strategia utilizzare per risolvere il problema.
Al momento non utilizzo la ricorsione, anche se ne viene suggerito l’uso.
#include <stdio.h>
#include <assert.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#define MAXN 10
using namespace std;
struct tessera{
int a;
int b;
int w;
};
static int N;
//static int sx[MAXN], dx[MAXN];
void stampa_tessere(vector <tessera> t){
cout << "Stato tessere ("<<t.size()<<")"<<endl;
for (int i=0; i<t.size(); i++)
cout << "("<<t[i].a<<","<<t[i].b<<")"<<" "<<t[i].w<<endl;
}
static FILE *fin, *fout;
int main(){
int val, val1, totale = 0;
std::vector <tessera> t;
fin = fopen("input.txt", "r");
//fout = fopen("output.txt", "w");
assert(1 == fscanf(fin, "%d", &N));
for(int i=0; i<N; i++) {
//assert(2 == fscanf(fin, "%d%d", sx+i, dx+i));
//cout<<"sx "<<sx[i]<<" dx "<<dx[i]<<endl;
assert(2 == fscanf(fin, "%d%d", &val, &val1));
tessera tess;
tess.a = val;
tess.b = val1;
tess.w = 1;
t.push_back(tess);
}
bool update = true;
int it = 0;
while (update){
cout << "Iterazione "<<it<<endl;
stampa_tessere(t);
update = false;
for (int i=0; i<t.size()-1; i++){
for (int j=i+1; j<t.size()-1; j++){
if (t[i].a == t[j].a){
t[i].a = t[j].b;
t[i].w++;
if (t[i].w > totale)
totale = t[i].w;
update = true;
t.erase(t.begin()+j);
break;
}
if (t[i].a == t[j].b){
t[i].a = t[j].a;
t[i].w++;
if (t[i].w > totale)
totale = t[i].w;
update = true;
t.erase(t.begin()+j);
break;
}
if (t[i].b == t[j].a){
t[i].b = t[j].b;
t[i].w++;
if (t[i].w > totale)
totale = t[i].w;
update = true;
t.erase(t.begin()+j);
break;
}
if (t[i].b == t[j].b){
t[i].b = t[j].a;
t[i].w++;
update = true;
if (t[i].w > totale)
totale = t[i].w;
t.erase(t.begin()+j);
break;
}
}
}
it++;
}
cout <<"Totale "<<totale<<endl;
fclose(fin);
//fclose(fout);
return 0;
}
Non riesco a capire quale sia la strategia migliore per capire se concatenare oppure no due tessere. Io erroneamente concateno le prime tessere che trovo e quindi non riesco ad ottenere la soluzione corretta. Qualcuno riesce ad aiutarmi?