Kolejny problem ... mianowicie program wysypuje się, gdy podam ilość krawędzi większą niż 4 (dla 5 i 6 się zwykły exe przestał działać).
Osobiście nie wiem sam nawet jak sprawdzać co jest nie tak przy takim błędzie, więc wysyłam kod:
#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;
}
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;
}