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

Szukanie cyklu Hamiltona

VPS Starter Arubacloud
0 głosów
586 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 (277,460 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 220 wizyt
pytanie zadane 4 grudnia 2016 w C i C++ przez martix3 Użytkownik (690 p.)
0 głosów
1 odpowiedź 710 wizyt
0 głosów
2 odpowiedzi 347 wizyt
pytanie zadane 28 sierpnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

93,006 zapytań

141,973 odpowiedzi

321,254 komentarzy

62,345 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...