Program wysypuje się po podaniu większej liczby niż 4

0

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

2

Tablice w C++ są numerowane od 0, a nie od 1. Odwołujesz się do elementów tablicy które, po prostu nie istnieją.

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