Witam, czy mógłby mi ktoś pomoc, mianowicie nie mam już pomysłu na zliczanie najszybszej 'lodygi' osiągającej wysokość, obecnie zlicza pierwsza drogę wzrostu. I druga prośba o pomoc z wypisywaniem, ponieważ mam problem z wypisywaniem tych samych poziomów w jednym rzedzie

#include <stdio.h>
#include <stdlib.h>
#include <time.h> 

#define BAD_ALLOC 123
enum TYP { LISC = 0, GALAZ, NIC }; // typ wyliczeniowy, sluzacy do określenia czym jest dany element, NIC -nic, które zostało jeśli wylosowalo się mniej niż 5 elementow


struct cale_drzewo
{
       enum TYP coto[ 5 ];
       struct cale_drzewo* dz1[ 5 ];    //tablica 5elmentowa wskaznikow ('nowego punktu')
       int poziom;  //  poziom wzrostu drzewa, odpowiadający kolejnym metrom

};

typedef struct cale_drzewo DRZEWO;

// zmienne globalne
int miesiace = 0;
int pz_konsoli = 0;
int koniec = 0;

//deklaracje funkcji
void rosnij( DRZEWO **korzen, int metry, int level, int* tab );
int losuj( int min, int max );
//void rysuj( DRZEWO *korzen );


int main( void )
{
    int ile_metrow = 6;
    int i;
    DRZEWO *korzen = NULL;
    /*
    scanf( &ile metrow );
    int* tab =(int*)malloc(sizeof( int ) * ile_metrow );
    */
    
     
   int tab[ 5 ] = { 0, 0, 0, 0, 0 };
    rosnij( &korzen, ile_metrow, 0, tab );
    
    miesiace = pz_konsoli;
    
    for( i = 0; i < ile_metrow; i ++ )
    {
         miesiace -= tab[i];
         if( tab[i] != 0 ) miesiace += 1;
    }
    //miesiace += ile_metrow;
                              //11miesiace = pz_konsoli - tab[0] - tab[ 1]-tab[2]-tab[3]-tab[4] + 5; // to zrobic w forze 
    /***** if ( suma == 0 ) na ostatnil levelu printf( "drzeweo nie osiagnelo wysokosci" )   ; */
    printf( "Drzewo osiagnelo wysokosc w %d miesiecy. \n" , miesiace );
  
  
  
  system("PAUSE");	
  return 0;
}

void rosnij( DRZEWO **korzen, int metry, int level, int* tab )
{
     if( level == metry )  //warunek konczacy zapetlanie, czyli drzewo osiaga swoja wysokość (kazda lodyga)
     {   koniec =1;
         return;
     }
     
     int suma = 0;   //zmienna sprawdzajaca 'same liscie' 
     int i, j;
     
     if( *korzen == NULL )   //dynamiczna alokacja pamięci dla kolejnych elementow 
     {
         *korzen = ( DRZEWO* )malloc( sizeof( DRZEWO ) );
         if( *korzen == NULL ) exit( BAD_ALLOC );
         (*korzen)->poziom = level;   //na którym poziomie znajduje się punkt wzrostu
     }

     int ile_nowych = losuj( 0, 5 );  //losuje ilość elementow
     
     printf( "%d ", (*korzen)->poziom );
     
     for( i = 0; i < ile_nowych; i++ ) 
     {
           ( *korzen )->coto[ i ] = losuj( 0, 1 );   //losuje czym jest element
           if( (*korzen )->coto[ i ] == GALAZ ) printf( "| " );    //jeśli galaz wypisuje |
           else printf( "& "); //lisc &
           suma += (*korzen )->coto[ i ]; 
     }
     
     printf( "\n" );
     
     
     for( i = ile_nowych; i < 5; i++ ) // przypisanie wolnym miejscom NCI
          ( *korzen )->coto[ i ] = NIC;
          
     if ( suma == 0 && ile_nowych != 0 ) //mozliwosc wyrosniercia nica, sprawdzaie czy same liscie
     {
          printf( " stop, same liscie\n" );   //koniec danej 'łodygi'
          return;
     }
     pz_konsoli++;
           
           
          if( ile_nowych != 0 )
          {
              tab[ level ]++;
              level++; //poziom drzewa
              for( j = 0; j < ile_nowych; j++ ) 
              {
                  if( ( *korzen )->coto[ j ] == GALAZ ) 
                  {
                      (*korzen)->dz1[ j ] = ( DRZEWO* )malloc( sizeof( DRZEWO ) );
                      ((*korzen)->dz1[ j ])->poziom = level;  // na którym poziomie znajduja się pojedyncza galaz
                      rosnij( &((*korzen)->dz1[ j ]), metry, level, tab );   // dalsze losowanie z kolejnych punktow
                  }
              }
          }

     if( ile_nowych == 0 )   //petla losujaca ponownie jeżeli z punktu wyrosło NIC
     {
         rosnij( korzen, metry, level, tab );
     }
}  


int losuj( int min, int max )
{
     srand( time( NULL ) ); 
     sleep( 150 );   );   //zwieksza odstep czasu miedzy losowaniami, wieksza losowość, możliwość zaobserowania wzrostu (pod windows) 
     return ( ( rand() % ( max + 1 ) ) + min );                  
}