ok scendo nei dettagli:
ho una linked list con tot elementi (ogni elemento contiene una coppia di numeri)
In parole povere se nella lista ho n elementi, devo trovare il modo per poter esaminare ogni sottoinsieme di elementi della lista partendo dal + grande al + piccolo. Esempio, se ho 4 elementi, prima esamino il primo, il secondo, il terzo. Poi il primo il terzo e il quarto. Creando quindi tutte le combinazioni possibili. Poi se una certa condizione non viene verificata passo ad esaminare sottoinsiemi di n-1 elementi poi n-2 e così via. QUindi per esempio passo a 2 elementi e quindi tutte le combinazioni tipo 12-13-14-23-21-24 etc.
Il codice che ho fatto io è abb spartano solo che non riesco ad esaminare sottoinsiemi che abbiano cardinalità superiori a n-2
codice:int test_cheked_gruppo(int partialMarito, int partialMoglie) { //calcola la somma delle età dei mariti e delle mogli solo degli elementi con chk=1 struct community *cursor; cursor=head; int sommaMarito=partialMarito; int sommaMoglie=partialMoglie; while (cursor!=NULL) { if (cursor->chk==1) { sommaMarito = sommaMarito + cursor->etaMarito; sommaMoglie = sommaMoglie + cursor->etaMoglie; } cursor=cursor->next; } if (sommaMarito == sommaMoglie) return 1; else return 0; } int max_gruppo_1(int partialMarito, int partialMoglie) { //verifica la condizione di somma età marito/moglie con cardinalità 1); struct community *cursor,*verify; cursor=head; verify=head; while (verify!=NULL) { //inizia a diminuire la cardinalità massima di un elemento per volta verify->chk=0; if (test_cheked_gruppo(partialMarito,partialMoglie) == 1) return 1; else { reset_comunita(0); verify=verify->next; } } return 0; } int max_gruppo_full() { //verifica la condizione di somma età marito/moglie struct community *cursor,*verify,*set_use; cursor=head; verify=head; set_use=head; if (test_cheked_gruppo(0,0) == 1) return 1; //effettua il calcolo della somma delle età dei mariti/mogli in tutti gli elementi della comunità cursor=head; if (max_gruppo_1(0,0) == 1) return 1; set_use->chk=2; while (set_use!=NULL) { if (max_gruppo_1(set_use->etaMarito,set_use->etaMoglie) == 1) return 1; else { reset_comunita(2); reset_comunita(0); set_use=set_use->next; } } return 0; }

Rispondi quotando