próba implementacji DFS, problem z tablica dynamiczna obiekt

0

nie wiem czemu po tym jak podam liczby do poszczególnych tablic w klasach wyłącza
mi się okno kompilacyjne ( chciałem zrobić sortowanie DFS dla podanej przez użytkownika liczbie wierzchołków nie większej jak 20 )
kod::
//DFS
#include<iostream>
#include<fstream> zewnętrznych

class dane//wierzcholka
{
public:
int kol;
int tab[19];
};

using namespace std;
//***********
main()
{
cout<<"zakladam ze waga kazdej krawedzi wynosi 1\n\n";
int wyb=0,n;
cout<<"ile wierzcholkow ma miec graf (max 20): ";
cin>>n;
dane tab=new dane[n-1] ;
for(int i=0;i<n;i++)
{
tab[i].kol=0;
for(int j=0;j<(n-1);j++)
{
tab[i].tab[j]=0;
}
}
cout<<"
0-konczy wpisywanie wierzcholkow lub podanie wszyskich pozostalych\n
wierzcholkow.\n
nie brana jest pod uwage kreatywnosc wpisujacego dane tzn. np ze wierzcholek\n* 1 jest polaczony z 2 a wierzch o nr 2 nie jest polaczony z 1\n\n";
for(int i=0;i<n;i++)
{
cout <<"podaj wierzcholki przylegle do wierzcholku "<<i+1<<" :" ;
for(int j=0;j<n-1;j++)
{
wyz:;
int w;
cin>>w;
if(w==0){break;}
if((w<0)or(w>n))
{
cout<<"\n podany nr. wierzcholka jest niewlasciwy, podaj jego nr. ponownie";
goto wyz;
}
tab[i].tab[j]=w;
}
}

for(int i=0;i<n;i++)
{
cout<<"\nwierz "<<i<<" ";
for(int j=0;j<n-1;j++)
{
cout<<tab[i].tab[j];
}
}
cout<<endl;

system("pause");

}

z góry thx za pomoc

0

Na algorytm nawet nie patrzyłem bo to:

dane *tab=new dane[n-1] ;   
for(int i=0;i<n;i++)

woła o pomstę do nieba. Tworząc tablicę podajesz ILOŚĆ JEJ ELEMENTÓW.
Robisz potem pętlę od 0 do n-1, a wiesz ile jest liczb pomiędzy 0 a n-1 ?
Nie, nie jest ich n-1, tylko n...
Konkludując : stworzyłeś tablicę która ma elementy od 0 do n-2 a potem wychodzisz poza ten zakres.

0

wielkie dzięki za pomoc.

0

w funkcji DFS wywala mi błąd ze obiekty klasy "dane" kol i ilość nie były deklarowane reszta chyba ok

//DFS
#include<iostream>
#include<str>
#include<fstream>  // biblioteka zawierajaca operacje we/wy  dotyczasce  plikow zewnętrznych

class dane//wierzcholka
{
public:
int kol;
int ilosc;           //0-nie był 1-był ale u  all dzieci nie 2-był i u dzieci tez był
int tab[19];       // skasuj to jak przeczytasz to skasuj all komentarze

};

using namespace std;

int DFS(/*dane *tab[],*/int od,int do_,int spojny);
int BFS(/*dane *tab[],*/int od,int do_,int spojny);  
int n;


//***********
main()
{
cout<<"**zakladam ze waga kazdej krawedzi wynosi 1\n\n";
int wyb=0,od,do_=0,spojny=0;
cout<<"ile wierzcholkow ma miec graf (max 20): ";
cin>>n;
dane *tab=new dane[n] ;  
for(int i=0;i<n;i++)
{    
  tab[i].kol=0;                      
  for(int j=0;j<(n-1);j++)  
   {
     tab[i].tab[j]=0;
   }
}                                              
cout<<"// 0-konczy wpisywanie wierzcholkow lub podanie wszyskich pozostalych\n//"
<<"  wierzcholkow.\n// nie brana jest pod uwage kreatywnosc wpisujacego dane tzn."
<<" np ze wierzcholek\n// 1 jest polaczony z 2 a wierzch o nr 2 nie jest polaczony z 1\n\n";
for(int i=0;i<n;i++)
  {                  
  cout <<"podaj wierzcholki przylegle do wierzcholku "<<i+1<<" :" ;
  for(int j=0;j<n-1;j++)
   {
     wyz:;
     int w;
     cin>>w;
     tab[i].ilosc=j;
     if(w==0){break;}
     if((w<0)or(w>n))
      {
        cout<<"\n podany nr. wierzcholka jest niewlasciwy, podaj jego nr. ponownie";
        goto wyz;
      }
      tab[i].tab[j]=w;
    }                                                                  
  }
system("cls");
do{
cout<<"\t\tmenu\n\t\t1-wypisz opis grafu\n\t2-najkrotsza pomiedzy dwoma punktami(BFS)\n\t"
    <<"3-czy podany graf jest spojny(BFS)?\n\t4"
    <<"-czy podany graf jest spojny(DFS)?\n\t5-koniec"<<endl;
cin>>wyb  ;
system("cls");
cout<<"od ktorego wierzcholka chcesz zaczac??";
cin>>od;
switch(wyb)
{
  case 1: {          
                 for(int i=0;i<n;i++)
                     {    
                       cout<<"\nwierzcholek  "<<i+1<<" jest polonczony z: ";                  
                       for(int j=0;j<n-1;j++)  
                        {
                              if(tab[i].tab[j]!=0)
                              { cout<<tab[i].tab[j]<<" ";}
                        }
                     }
                 cout<<endl;
                 system("pause");                
                 system("cls");
                 break;
        }
  case 2:{
                 do_=1;
                  break;
         }
  case 3:{
                 
                   break;
         }
  case 4:{
                   
                    int odp;
                    do_=0;
                    spojny=1;
                    odp=DFS(od,do_,spojny);
                    break;
         }
}
}while(wyb!=6);
                 
}
//******************
int DFS(/*dane *tab1[]*/int od,int do_,int spojny)
    {            
              extern dane *tab[] ;
             
             
              tab[od-1].kol=1;
              int s=tab[od-1].ilosc;
              int v,war,war1;
              for(int i=0;i<s;i++)
               {  
                 for(int j=0; j<s ; j++)                
                 {                        
                         v=tab1[i].tab[j]-1;
                         if(do_!=0)
                         {
                            if(do_==v+1){war1=1; goto tam;}      
                         }
                 }                        
                 if(tab[v]==0){ DFS(v,do_,spojny);}
                 
               }
 
               tab[od-1].kol=2;      
               if(spojny!=0)
                 {
                    war=1;
                    for(int i=0;i<n;i++)
                       {
                            if(tab[i].kol==0)
                            {war=0; break;}
                       }  
                 }  
               tam:;  
               if(spojny!=0)  
                    { return war; }
               else { return war1; }
     } <\cpp>
0

Masz tam extern, czyli sygnał że te zmienne są gdzieś zdefiniowane, a ja żadnej definicji w tym kodzie nie widzę. Poza tym po cóż extern jak masz jeden plik? o_O

0

dane *tab=new dane[n] ;

jak dla mnie to jest definicja tablicy dynamicznej tego typu

1 użytkowników online, w tym zalogowanych: 0, gości: 1