void przesiewanie(int g, FILE *W,FILE * Z,nazwa_pliku devZ,int *sc,int n) // dane: plik W o dlugosci g, wyniki: plik Z o dlugosci sc { int i,j,l; enum Boolean jest; TGraph G1, G2; odczytaj_z_pliku(n,W,&G1); // pierwszy graf z W do G1 zapisz_do_pliku(n,Z, &G1); //przepisanie G1 na plik Z fclose(Z); j=1; //aktualna dlugosc pliku Z for (i=2; i<= g; i++ ) { // przegladanie pliku W odczytaj_z_pliku(n,W,&G1); //kolejny graf z W do G1 // Z=fopen(devZ,"r+b"); Z=fopen(devZ,"rb"); //porownywanie G1 z kolejnymi G2 z pliku Z jest=falsz; l=1; while ((l <= j)&& (!jest)) { odczytaj_z_pliku(n,Z,&G2); if (EqualGraphs(n+1, &G1, &G2)) jest=prawda; else l++; } if (!jest) { // jesli G1 nie ma w pliku Z, to dopisz Z=fopen(devZ,"ab"); zapisz_do_pliku(n,Z, &G1); j++; fclose(Z); } fclose(Z); } // i *sc=j; //liczba nieizomorficznych sc grafow w pliku Z fclose(W); //zamkniecie pliku W // fclose(Z); //zamkniecie pliku W */ *sc=j; }// przesiewanie
void konstr(int n,int k, int rep,FILE *W, int *g) //wynik: plik W o dlugosci g { int i,h,total; t1 E; TGraph G1,G2; init(n, E, &total); //icjalizacja tablicy E i=0; // licznik wygenerowanych sc-grafow for (h=1; h<=rep; h++) { Gnk(k, total, E); //generacja Gnk transEGr(n, k, total, E,& G1); // transformacja do pola A w G1 jeden(n, &G1); // wypelnienie pol Deg i DegSort w G1 complement(n, &G1, &G2); //G2.A jest dopelnieniem G1.A jeden(n, &G2); //pola Deg, DegSort w G2 if (EqualGraphs(n+1, &G1, &G2)) { //sprawdzenie czy G1, G2 sa izomorficzne i++; zapisz_do_pliku(n,W, &G1) ; } } *g=i; fclose(W); } // konstr
int main() { int stan; instrukcja(); stan = wybor(); autowczytywanie(); while(1) { switch(stan) { case 1: wyswietl_liste(); komunikaty(18); break; case 2: dodaj_elementy_z_klawiatury(); komunikaty(18); break; case 3: wczytaj_z_pliku(); komunikaty(18); break; case 4: usun_element(); komunikaty(18); break; case 5: usun_wszystkie_elementy(); komunikaty(18); break; case 6: zapisz_do_pliku(); komunikaty(18); break; case 7: autozapisywanie(); exit(0); } stan = wybor(); } return 0; }