questa è una funzione dove si effettuano 4 ricerche su 3 liste differenti.ogni chiamata a funzione comprende una ricerca..Mi son incasinato col calcolo del costo perke' nn riesco a capire se è lineare o quadratico..
codice:int ordina(char *s1,char *s2) { rel1 *r1=inizioRel1; rel2 *r2=inizioRel2; rel3 *r3=inizioRel3; rel1 *tmp=NULL; rel1 *tmp1=NULL; rel2 *tmp3=NULL; rel1 *temp=NULL; int flag=0; //controllore. Se la prima regola non esiste sara' posto a zero altrimenti a 1 int cont=0,cont1=0; char str[MAXSTRING]; char str1[MAXSTRING]; char str2[MAXSTRING]; strcpy(s1,s1); strcpy(s2,s2); cont=contD; cont1=contB; if(strcmp(s1,s2)==0) //se inserisco due specie uguali esco return 0; else if(r1!=NULL) //se la lista delle regole di base non è vuota inserisco in coda la nuova regola { flag=1; //pongo a 1 il flag per dire la lista delle regole di base non è vuota tmp=insertRelBase(s1,s2); if(tmp==0) //se il valore di ritorno è 0, vuol dire che la regola inserita era errata return 1; else if(controlloRegole(r1,s1,s2)==0) //controllo se l'introduzione della nuova regola produce un ciclo o delle regole derivate corrette { printf("\n-1\n"); cancellaCiclo(tmp); //se si verifica un ciclo cancello l'ultima regola inserita che lo ha provocato return 1; } } if(0==flag) //se flag è uguale a 0, vuol dire che la lista delle regole di base era vuota { insertRelBase(s1,s2); //inserisco la nuova regola insertRegole(); //la aggiungo alla lista delle regole generali return 1; } else //se la lista contiene già altre regole { cont=contD; insertRegole(); //unisco la lista delle regole di base e quella delle derivate nella liste delle regole generali contrRegoleGenerale(r3); //controlle se a loro volta creano delle regole derivate } return 1; }

Rispondi quotando