Witam ponownie.
Mam taki problem z programem, wysypuje mi się gdy podam większą ilość krawędzi lub wierzchołków niż 4 (np 5 lub 6). Jest to program do szukania cykli eulera, czy ktoś mógłby mi pomóc bo nie mogę znaleźć przyczyny?
#include <iostream>
#include <conio.h>
using namespace std;
/* ZMIENNE GLOBALNE */
int ile_w, ile_k, sptr, ex;
int ** A; //MACIERZ SĄSIEDZCTWA
int *S; //STOS W TABLICY
void Euler (int x)
{
int i;
for(i=1; i<ile_w+1; i++) //SPRAWDZENIE SĄSIADÓW
while(A[x][i])
{
A[x][i]--; //USUWANIE KRAWĘDZI
A[i][x]--;
Euler(i); //REKURENCJA
}
S[sptr++]=x;
}
int main()
{
int i,j,x1,x2;
cout<<"PODAJ LICZBE WIERZCHOLKOW W GRAFIE"<<endl; // CZYTAMY LICZBĘ WIERZCHOŁKÓW
cin>>ile_w;
cout<<"PODAJ LICZBE KRAWEDZI W GRAFIE"<<endl; // CZYTAMY LICZBĘ KRAWĘDZI
cin>>ile_k;
A = new int * [ile_w]; //TWORZYMY TABLICĘ WSKAŹNIKÓW
S = new int [ile_k+1]; //TWORZYMY STOS
sptr=1;
for(i=1;i<ile_w+1;i++)
A[i]=new int [ile_w]; //TWORZYMY WIERSZE MACIERZY SĄSIEDZCTWA
for(i=1;i<ile_w+1;i++)
for(j=1;j<ile_w+1;j++) A[i][j]=0; //MACIERZ WYPEŁNIAMY ZERAMI
/* ODCZYT KOLEJNYCH DEFINICJI KRAWĘDZI */
for(i=1; i<ile_k+1;i++)
{
cout<<"PODAJ PIERWSZY WIERZCHOLEK KRAWEDZI NUMER "<<i<<endl; //PIERWSZY WIERZCHOLEK KRAWEDZI
cout<<"DOSTEPNE WIERZCHOLKI OD 1 DO "<<ile_w<<"."<<endl;
cin >> x1;
while ((1>x1) || (x1> ile_w))
{
cout << "BLEDNA KRAWEDZ" << endl;
cin >> x1;
}
cout << "KRAWEDZ PRAWIDLOWA" << endl;
cout<<"PODAJ DRUGI WIERZCHOLEK KRAWEDZI NUMER "<<i<<"."<<endl; //DRUGI WIERZCHOŁEK KRAWĘDZI
cout<<"DOSTEPNE WIERZCHOLKI OD 1 DO "<<ile_w<<"."<<endl;
cin >> x2;
while ((1>x2) || (x2> ile_w))
{
cout << "BLEDNA KRAWEDZ" << endl;
cin >> x2;
}
cout << "KRAWEDZ PRAWIDLOWA" << endl;
A[x1][x2]++; //WYPEŁNIANIE MACIERZY SĄSIEDZCTWA
A[x2][x1]++;
}
/* WYZNACZENIE CYKLU EULERA */
Euler(1);
cout<<"CYKL EULERA"<<endl;
/* WYPISANIE ZAWARTOŚCI STOSU */
for(i=1;i<sptr; i++) cout <<S[i]<<" "<<endl;
/* USUNIĘCIE TABLIC DYNAMICZNYCH */
for(i = 1; i < ile_w+1; i++) delete [] A[i];
delete [] A;
delete [] S;
cout<<endl<<"Wcisnij dowolny klawisz by zakonczyc program."<<endl;
getch();
return 0;
}
dodanie znacznika <code class="cpp">
- @furious programming