Cykl Hamiltona

0

Mam do napisania program w c++ który, jak to w cyklu Hamiltona, ma poprowadzić ścieżkę przez wszystkie punkty w grafie dokładnie jeden raz. Nie mogę nigdzie znaleźć algorytmu do tego cyklu, ponoć nie ma takiego. Znalazłem u wujka googla kod który teoretycznie rozwiązuje mój problem, ale przy próbie skompilowania go wyskakują błędy których nie potrafię ominąć. Proszę o wszelką pomoc
Oto kod który znalazłem:

#include <iostream>
#include <list>

using namespace std;

const int MAXV = 20; // maksymalna liczba wierzchołków

// Zmienne globalne

int n,m;  // liczba wierzchołków i krawędzi w grafie
list<int> q, L[MAXV+1];
bool visited[MAXV+1];

// Rekurencyjna funkcja DFS wyszukująca ścieżki w grafie

void DFSHamilton(int v)
{
  q.push_back(v);
  if(q.size() == n)
  {
    bool test = false;
    for(list<int>::iterator i = L[v].begin(); i != L[v].end(); i++)
      if((*i) == 1)
      {
        test = true; break;
      }
    if(test) cout << "   Cykl"; else cout << "Sciezka";
    cout << " Hamiltona : ";
    for(list<int>::iterator i = q.begin(); i != q.end(); i++)
      cout << (* i) << " ";
    cout << endl;
  }
  else
  {
    visited[v] = true;
    for(list<int>::iterator x = L[v].begin(); x != L[v].end(); x++)
      if(!visited[* x]) DFSHamilton(* x);
    visited[v] = false; 
  }
  q.pop_back();     
}

main()
{

// Odczytujemy definicję grafu ze standardowego wejścia

  cin >> n >> m;
  for(int i = 1; i <= m; i++)
  {
    int v,w; cin >> v >> w;
    L[v].push_back(w);
    L[w].push_back(v);        
  }
  cout << endl;

// Rozoczynamy wyszukiwanie cykli Hamiltona

  q.clear();
  for(int i = 1; i <= n; i++) visited[i] = false;
  DFSHamilton(1);

// Koniec

  cout << endl;  
  system("PAUSE");
}
0

Szukanie cyklu Hamiltona jest problemem NP-zupełnym. Istnieje na to algorytm, ale o złożoności wykładniczej ;) Jesteś pewien że nie chodzi o cykl Eulera na przykład?

0

"Wyznaczanie cyklu Hamiltona (analiza przypadków od mostu do grafu pełnego Kn, dla parametru n)" tak dokładnie brzmi temat mojej pracy, do której muszę dodać program w c++. Nie będę ukrywał, że najlepiej dla mnie byłoby, gdyby ktoś wskazał mi błędy w kodzie, abym mógł go odpalić. Jak już będzie działał, to poradze sobie żeby go zrozumieć, ale póki co nie mogę znaleźć błędów

0

jakie bledy?

0

w VS2008 program kompiluje się bez problemowo.

0

Sprobuj dodac biblioteke cstdlib, bez niej moze nie widzec funkcji system. A tak poza tym to wszystko jest w porzadku.

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