Powrót na początek listy

0

Dzień dobry,

Mam do napisania program tworzący m.in. listę następników na podstawie grafu i późniejsze przeszukiwanie jej metodami DFS i BFS. Temat bardziej algorytmiczny, ale problem dotyczy samego C++.

Lista następników u mnie jest "listą list". Samo jej stworzenie się udało, jednak mam problem przy BFS (funkcja jest jeszcze we wczesnych etapach powstawania :) ). Na razie chcę wypisać pierwsze elementy każdej z list zapisanych w "LN- lista następników"- jakby "pierwszą kolumnę" oznaczającą po prostu kolejne wierzchołki, żeby potem rozpocząć wkładanie do kolejki. Jednak program wypisuje zawsze wartość końcowego elementu każdej listy. Jak więc można się przenieść na jej początek i stamtąd rozpocząć pobieranie wartości?

W załączniku kod całościowy- w razie potrzeby.

Fragment kodu:
LN- lista następników;
n-liczba wierzchołków grafu;
mac-macierz sąsiedztwa dla danego grafu
v- tablica określająca, czy dany wierzchołek był już odwiedzony

Implementacja listy:

class Graf
{
    (...)
    void tworzymygrafy ()
    {
(...)
cout<<"----------------TWORZENIE LISTY NASTEPNIKOW-------------------";

        lista *kon, *nowy, *listapom, *pocz;
        LN= new lista*[n];
        listapom=new lista[1];
        kon =new lista[1];

        for(i=0; i<n; ++i)
        {
            LN[i]=NULL;
        }
        for(i=0; i<n; ++i)
        {
            nowy = new lista[1];
            nowy->liczba=i;
            nowy->next=NULL;
            LN[i]=nowy;
            cout<<"\n"<<nowy->liczba;
            for(j=0; j<n; ++j){
            if (mac[i][j]==1)
            {
                nowy->liczba = j;
                nowy->next = NULL;
                kon->next = nowy;
                nowy->next=NULL;
                cout<<"->"<<nowy->liczba;
                kon = nowy;
            }
        }
    }}

};

Funcja przeszukująca- in spe


void lbfscel (unsigned long int element, unsigned long int n)
{
    queue <unsigned long int> kolejka;
    unsigned long int i;
    //do
   // {
        cout<<"element: "<<LN[element]->liczba<<endl;
        //LN[element]->next;
   // }
    //while(LN[element]->next!=NULL);
}

void lbfs (unsigned long int n)
{
    unsigned long int i;
    for (i=0; i<n; i++)
        v[i]=false;
    cout<<"ok"<<endl;
    for (i=0; i<n; i++)
        if (!v[i]) 
             lbfscel(i, n);
}

Z góry dziękuję za odpowiedź i przepraszam za głupie błędy, ale właśnie na nich człowiek uczy się najefektywniej :/

0

Jeżeli masz klasę graf zrobioną tak że musisz "tworzyć" listę następników to trzeba zacząć od przeprojektowania klasy graf.

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