• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szukanie cyklu Hamiltona

Konkurs Mistrz Programowania
0 głosów
656 wizyt
pytanie zadane 20 maja 2017 w C i C++ przez Smileandlove Nowicjusz (230 p.)

Witam, mam do napisania program, który tworzy graf, a następnie wyszukuje w nim cykl Hamiltona. Niestety coś poszło nie tak i funkcja rekurencyjna wyszukiwania cyklu trochę oszalała. Teoretycznie wyszukuje ona ten cykl, ale wypisuje wynik kilka razy(czasem są to różne wyniki). W momencie kiedy powinna się skończyć, wypisuje wynik, a potem "wskakuje" w środek(konkretnie to do pierwszej pętli for) omijając nawet warunek if. Nie mam pojęcia z czego to może wynikać, proszę o pomoc.

void Hamilton(int v)
{
 
        bool sprawdz;
        Lista *p;
 
 
        stos[s++]=v;
        if(s<n)
        {
            odwiedzone[v]=true;
 
            for(p=tablica[v]; p ; p=p->next )
                if(!odwiedzone[p->v]) Hamilton(p->v);
            odwiedzone[v]=false;
        }
        else
            {
                sprawdz=false;
 
                for(p=tablica[v]; p; p=p->next)
                {
                    if(!p->v)
                    {
                        sprawdz=true;
                        break;
                    }
                }
 
                if(sprawdz==true)
                {
 
                    cout<<"W grafie istnieje cykl Hamiltona"<<endl;
                }
                else
                {
 
                    cout<<"W grafie nie ma cyklu Hamiltona"<<endl;
                }
 
                for(int i=0; i<s; i++)
            {
                cout<< setw(3) << stos[i];
            }
            if(sprawdz)
            {
                cout<< setw(3) << 0;
 
            }
            cout<<endl;
            }
s--;
 
 
 
 
}

 

1 odpowiedź

0 głosów
odpowiedź 20 maja 2017 przez Wiciorny Ekspert (282,600 p.)

tu może być problem, gdyż : 

 stos[s++]=v; // formalnie zwiekszasz przez inkrementacje nie tylko dlugosc tablicy, ale sama wartosc s

potem natomiast szukasz w funkcji 

 for(int i=0; i<s; i++)  // zwiekszyles sama wartosc s, wiec mozesz iterowac po smieciowych komórkach 

dopiero potem zmniejszasz 

 

Podobne pytania

0 głosów
0 odpowiedzi 261 wizyt
pytanie zadane 4 grudnia 2016 w C i C++ przez martix3 Użytkownik (690 p.)
0 głosów
1 odpowiedź 898 wizyt
0 głosów
2 odpowiedzi 534 wizyt
pytanie zadane 28 sierpnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

93,653 zapytań

142,574 odpowiedzi

323,090 komentarzy

63,170 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...