Thema: Rekursion c++
Einzelnen Beitrag anzeigen
Ungelesen 07.10.10, 20:15   #3
ponchosi
Anfänger
 
Registriert seit: Jan 2010
Beiträge: 8
Bedankt: 0
ponchosi ist noch neu hier! | 0 Respekt Punkte
Standard

Code:
#include <iostream>
#include <fstream>
using namespace std;
#include <stdlib.h>
#include <time.h>
#include <math.h>

typedef int kn_info ;

struct knoten
 {
   kn_info info;
   knoten * lnachf, * rnachf;
};

struct baum {
    knoten *wurzel;
    int anzknoten;
};


void baumaus(ofstream & ,baum );
void initialize(baum &);
unsigned long long int anz(int);
void aufbau(ofstream &,knoten *&,baum,int &, int,int);
void knot(ofstream &, const knoten *, int);

int main (){
    int n,m;
    baum b;

    initialize(b);
    ofstream datout;
    char datnameout[20];

    cout<<"Bitte geben Sie die Anzahl der Knoten ein ! \n";
    cin>>n;
    m = n;
    cout<<"Die Anzahl aller möglichen Strukturen ist gleich "<<anz(n)<<"\n";

    do{
         cout << "Namen fuer die Ausgabedatei eingeben: ";

         cin >> datnameout;

         datout.open(datnameout);

         if (datout.fail())

             cerr << "Datei \"" << datnameout
             << "\" kann nicht geoeffnet werden!! \n";
      } while (datout.fail());

      aufbau(datout,b.wurzel,b,b.anzknoten,n,m);



}

unsigned long long int anz(int n){
    

    if ((n == 0) || ( n == 1)) return 1;


    else {

        unsigned long long  int r=0;

        for (int i = 0;i < n;i++){
        
            r = r + anz(i) * anz((n-1-i));
    }

     return r;
    }
}


void aufbau(ofstream &datout,knoten *(&p),baum b,int &a,int n,int m){



   if (a == m) {
        baumaus(datout,b);
        p=NULL;
        a = a - 1 ;
        datout<<"\n\n";
       

    }

    if(n>0) {
        p = new knoten;
        p->lnachf = p->rnachf = NULL;
        p->info = n;
        a++;
        if(b.wurzel == NULL) b.wurzel = p;
    }

    else p = NULL;

    for (int i = 0; i <n; i ++){
        aufbau(datout,p->rnachf,b,a,i,m);
        aufbau(datout,p->lnachf,b,a,(n-1-i),m);
        
    }



    

}


void initialize(baum &b)
//   ==========                                 //
// Initialisiere den Baum "vb" ordnungsgemaess. //
{ b.wurzel = NULL;
  b.anzknoten = 0;
 } // <--- Ende initialize


void baumaus(ofstream & datout, const baum b)
//   =======                                   //
// Ausgabe des Baumes "vb" in seiner Struktur. //
{ knot(datout,b.wurzel,0);
 } // <--- Ende baumaus //


void knot(ofstream & datout, const knoten * p, int t)
//   ====                                           //
// Ausgabe des Baumes, Hilfsroutine fuer "baumaus". //
{ int i;
  if (p != NULL)
   { knot(datout,p->rnachf,t+1);
     for (i=1; i <= t; i++) datout << "   ";
     datout << p->info << "\n";
     knot(datout,p->lnachf,t+1);
    }
  
 } // <--- Ende knot
ponchosi ist offline   Mit Zitat antworten