Fase Territoriale 2011
Sono date N tessere di domino, dove ogni tessera contiene due numeri compresi da 0 a 6 in corrispondenza delle sue due estremità.
Le tessere possono essere ruotate e la regola impone che due tessere possono essere concatenate se le loro estremità in contatto hanno inciso lo stesso numero.Aiuta a trovare il maggior numero di tessere che si possono concatenare a formare un’unica catena: non è detto che si riescano sempre a usare tutte le tessere; inoltre, possono esserci due o più tessere uguali a meno di rotazioni.
Dati di input
Il file input.txt è composto da N+1 righe.
La prima riga contiene l’intero positivo N, il numero delle tessere a disposizione.
Ciascuna delle successive N righe contiene due interi positivi (compresi da 0 a 6) separati da una spazio, che rappresentano i numeri incisi sulle estremità delle tessere.Dati di output
Il file output.txt è composto da una sola riga contenente il massimo numero di tessere che possono essere concatenate con le regole del domino.
Assunzioni
- 2 ≤ N ≤ 10.
Esempi di input/output
input.txt output.txt 6
3 0
4 0
2 6
4 4
0 1
1 05
/* www.valcon.it OII 2011 - Fase territoriale - Domino massimale */ #include#include #define NMAX 10 using namespace std; struct tessera{ int sx, dx; }; tessera tesSX[NMAX]; tessera tesDX[NMAX]; tessera tesSol[NMAX]; bool usata[NMAX]; int N; int risposta=0; void soluzione(int num) { if(num > risposta) risposta=num; for(int i=0; i < N; i++) { if(usata[i] == false) { if(tesSol[num-1].dx == tesSX[i].sx) { usata[i]=true; tesSol[num]=tesSX[i]; soluzione(num+1); usata[i]=false; } if(tesSol[num-1].dx == tesDX[i].sx) { usata[i]=true; tesSol[num]=tesDX[i]; soluzione(num+1); usata[i]=false; } } } } int main() { ifstream fin ( "input.txt"); ofstream fout("output.txt"); fin >> N; int sin, des; for(int i=0; i < N; i++) { fin >> sin >> des; tesSX[i].sx=sin; tesSX[i].dx=des; tesDX[i].sx=des; tesDX[i].dx=sin; usata[i]=false; } for(int i=0; i < N; i++) { usata[i]=true; tesSol[0]=tesSX[i]; soluzione(1); tesSol[0]=tesDX[i]; soluzione(1); usata[i]=false; } fout << risposta; return 0; }