logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak wyświetlić połączenia wierzchołków w grafie w C++?

Dr. Ma 16 Gru 2008 11:32 1542 2
REKLAMA
  • #1 5865732
    Dr. Ma
    Poziom 12  
    Posty: 99
    Ocena: 3
    Witam,

    Obecny mój problem wynika z niemożności ukazania drogi w grafie. Chciałbym aby program pokazywał z jakimi wierzchołkami łączy się dany wierzchołek np: wierzchołek 1 łączy się z 2 i3.

    Napisalem oto taki program:

    
    
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    class Graf
    {
          
            
            private:
                    int graf[n][n];  
                    const int n=6;               
                   
                     public:
                             int how;
           
            
    
    
    
    R(int i){
             how = i;
             for(int i=0; i < how; i++)
             {
             
                     for(int j=0; j < how; j++)
                     {
                             R[n][n]=0;
                     }
                     }
             }
      void zeruj(int R[n][n]);
      void route(int R[n][n]);
      void pisz(int x, int y, int R[n][n]);
    };
    
    void zeruj(int R[n][n])
    {
    for(int i=0;i<n;i++)
    	for(int j=0;j<n;j++)
    		R[i][j]=0;
    }
    
    void route(int R[n][n])
    {
    for(int x=0;x<n;x++)
      for(int y=0;y<n;y++)
    	if(R[y][x]!=0) // wiemy jak dojœæ z 'y' do 'x'
        for(int z=0;z<n;z++)
           if(R[y][z]==0 && R[x][z]!=0) R[y][z]=R[y][x];
    }
    
    void pisz(int x, int y, int R[n][n])
    {
    int k;
    if(R[x][y]==0) 
          cout << "Droga nie istnieje\n";else
             {
             cout << x << endl;
             k=x;
             while(k!=y)
                  {
                  k=R[k][y];
                  cout << k << endl;
                  }
             }
    cout << "----------------\n";
    }
    
    
    int main()
    {
    int i,j;
    
    zeruj(graf);
    
    graf[0][3]=3;
    graf[0][5]=5;
    graf[1][2]=2;
    graf[2][4]=4;
    graf[3][1]=1;
    graf[3][4]=4;
    graf[5][4]=4;
    graf[4][5]=5;
    graf[5][2]=2;
    
    
    route(graf);
    for(i=0;i<n;i++)
       for(j=0;j<n;j++)
        {
         cout<<"Doga od wierzcholka "<<i<<" do "<<j<<":\n";
         pisz(i,j,graf);
        getchar();
        getchar();
        }
    
    
    }
    
    


    Jednak nawet nie dochodzi do jego kompilacji. Pomożecie w pokazaniu gdzie znajduje się problem i jak go naprawić.

    Pozdrawiam
  • REKLAMA
  • #2 5865831
    kloszi
    Poziom 21  
    Posty: 547
    Pomógł: 34
    Ocena: 89
    1) A jak chcesz pokazać drogę na grafie? przecież to co napisałem to jest czysty C a przydała by się jakaś biblioteka do grafiki (Builder, BGI itp.)
    2) Dlaczego się nie kompiluje ? (podaj kompilator i error jaki pokazuje kompilator). Sądzę że jak sam to pisał to byś chociaż wiedział gdzie pojawia się błąd.
    3) Jaki system operacyjny ? (Windows Linux ...)
  • #3 5865860
    Dr. Ma
    Poziom 12  
    Posty: 99
    Ocena: 3
    Tak wiec pytania, które mi postawiłeś są mało zasadne aczkolwiek odpowiem na nie. Jeżeli wspominasz o pierwszym elemencie to nie jest czyste c jest to programowanie c++ (programowanie obiektowe). Odnośnie drugiego to nie masz niestety racji, gdyż sprawdziłem owy problem w gcc, Dev, bilderze (mam nadzieje ze wiesz o czym pisze). System nie jest tutaj ważny, gdyż zarówno pod windem jak I linuxem powinno śmigać. Proszę o poważne potraktowanie problemu.

    
    #include <iostream.h>
    
    const int n=6; 
    
    int graf[n][n];
    
    void zeruj(int R[n][n])
    {
    for(int i=0;i<n;i++)
    	for(int j=0;j<n;j++)
    		R[i][j]=0;
    }
    
    void route(int R[n][n])
    {
    for(int x=0;x<n;x++)
      for(int y=0;y<n;y++)
    	if(R[y][x]!=0) // wiemy jak dojœæ z 'y' do 'x'
        for(int z=0;z<n;z++)
           if(R[y][z]==0 && R[x][z]!=0) R[y][z]=R[y][x];
    }
    
    void pisz(int x, int y, int R[n][n])
    {
    int k;
    if(R[x][y]==0) 
          cout << "Droga nie istnieje\n";else
             {
             cout << x << endl;
             k=x;
             while(k!=y)
                  {
                  k=R[k][y];
                  cout << k << endl;
                  }
             }
    cout << "----------------\n";
    }
    
    
    int main()
    {
    int i,j;
    
    zeruj(graf);
    
    graf[0][3]=3;
    graf[0][5]=5;
    graf[1][2]=2;
    graf[2][4]=4;
    graf[3][1]=1;
    graf[3][4]=4;
    graf[5][4]=4;
    graf[4][5]=5;
    graf[5][2]=2;
    
    
    route(graf);
    for(i=0;i<n;i++)
       for(j=0;j<n;j++)
        {
         cout<<"Doga od wierzcholka "<<i<<" do "<<j<<":\n";
         pisz(i,j,graf);
        getchar();
        getchar();
        }
    
    
    }
    
    
    
    


    Powyżej zamieszczam program działający. Czy nadal się nie da tego napisać w C++?

    Temat uważam za zamknięty.

    Pozdrawiam
REKLAMA