Advertisement
kubpica

Drzewa t-arne o n węzłach

Mar 19th, 2017
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.63 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. bool czydopliku = false;
  7. ofstream wynik;
  8.  
  9. void wypiszXdrzewa(int n, int t, int *a)
  10. {
  11.     if(czydopliku) wynik << "x="; else cout << "x=";
  12.     int dlugoscx = t*n;
  13.     int j = 0;
  14.     for (int i = 1; i <= dlugoscx; i++){
  15.         if(j<n && a[j]==i){
  16.             if(czydopliku) wynik << "1"; else cout << "1";
  17.             j++;
  18.         }else{
  19.             if(czydopliku) wynik << "0"; else cout << "0";
  20.         }
  21.     }
  22. }
  23.  
  24. int main()
  25. {
  26.         wynik.open("wynik.txt");
  27.         int n = 0;
  28.         cout << "Program generuje wszystkie możliwe reprezentacje typu Z (w kolejnosci RevLex) drzewa t-narnego o podanych właściwościach i zamienia go na zapis w reprezentacji typu X." << endl;
  29.         cout << "Gdzie wypisac wyniki? 1 - na ekran 2 - do pliku" << endl;
  30.         cin >> n;
  31.         if(n==2) czydopliku = true;
  32.         n = 0;
  33.         cout << "n oznacza ilosc rozgalezien. Podaj n: ";
  34.         cin >> n;
  35.         int t = 0;
  36.         cout << "t oznacza ilosc galezi w jednym rozgalezieniu. Podaj t: ";
  37.         cin >> t;
  38.  
  39.         cout << "Rozpoczynam wypisywanie kolejnych mozliwych drzew t-arnych o podanych danych w reprezentacji X (dodatkowo po spacji podaje zapis w reprezentacji typu Z)" << endl;
  40.  
  41.         int a[1024];
  42.         a[0] = 1;
  43.         for (int i = 1; i < n; i++) a[i] = a[i-1]+t;
  44.         int ilosc = 0;
  45.         /*cout << ilosc << ". z:";
  46.         for (int i = 0; i < n; i++) cout << a[i];
  47.         cout << endl;*/
  48.  
  49.         do{
  50.             ilosc++;
  51.             if(czydopliku) wynik << ilosc << ". "; else cout << ilosc << ". ";
  52.             wypiszXdrzewa(n, t, a); //if(czydopliku) wynik << else
  53.             if(czydopliku) wynik << " z:"; else cout << " z:";
  54.             for (int i = 0; i < n; i++){
  55.                     if(czydopliku) wynik << a[i] << " "; else cout << a[i] << " ";
  56.             }
  57.             if(czydopliku) wynik << endl; else cout << endl;
  58.             a[n-1]--;
  59.             for(int i = 1; n-i-1>=0 ; ){
  60.                 if( a[n-i] == a[n-i-1] ){
  61.                     a[n-i-1]--;
  62.                     a[n-i] = t*(n-i)+1;
  63.                     i++;
  64.                 } else break;
  65.             }
  66.         }while(a[0] == 1); //&& ilosc < 24
  67.  
  68.         if(czydopliku) wynik << "Ilosc wygenerowanych drzew: " << ilosc << endl; else cout << "Ilosc wygenerowanych drzew: " << ilosc << endl;
  69.         if(czydopliku) wynik << "Ilosc lisci: " << (t-1)*n+1 << endl; else cout << "Ilosc lisci: " << (t-1)*n+1 << endl;
  70.         if(czydopliku) cout << "Gotowe. Wyniki znajdziesz w pliku wynik.txt" << endl;
  71.  
  72.         cin >> n;
  73.  
  74.         return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement