Problem z grafem nieskierowanym na wektorach

0

Witam,
Walczę z implementacją grafu nieskierowanego na wektorach. Póki co samo przedstawienie grafu w komputerze. Numery wierzchołków ustalam od 1.

Problem: program kończy się nieprawidłowo przy wyświetlaniu tzn. wychodzę jakoś poza zakres tablicy, ale nie bardzo wiedzę jak. Będę wdzięczny za wskazówkę.

Dane na wyjściu chcę reprezentować w następującej postaci:
wierzchołek: wierzchołek z którym się łączy -> waga, wierzchołek z którym się łączy -> waga

Kod wygląda tak:

#include <iostream>
#include <vector>

using namespace std;

struct Krawedz {
    int wierzcholek;
    int waga;
};

class Graf {
private:
    const int n;
    vector<Krawedz> *wierzcholki;
public:
    Graf(int n, int m) : n(n) {
        // alokacja
        wierzcholki = new vector<Krawedz>[n + 1];

        // a, b - wierzcholki laczone krawedzia
        // c - waga krawedzi
        int a, b, c;
        for(int i = 1; i <= m; ++i) {
            Krawedz tmp;
            cout << "Krawedz " << i << ": ";
            cin >> a >> b >> c;
            tmp.waga = c;
            tmp.wierzcholek = b;
            wierzcholki[a].push_back(tmp);
            tmp.wierzcholek = a;
            wierzcholki[b].push_back(tmp);
        }
    }
    void wyswietl() {
        for(int i = 1; i <= n; ++i)
        {
            cout << i << ": ";
            int size = wierzcholki[i].size();
            for(int j = 1; j <= size; ++j) {
                cout << wierzcholki[i].at(j).wierzcholek << "->" << wierzcholki[i].at(j).waga << ", ";
            }
            cout << endl;
        }
    }
};

int main()
{
    // 5 wierzchokow, 6 krawedzi
    Graf a(5, 6);
    cout << "Wyswietlanie grafu" << endl;
    a.wyswietl();

    return 0;
}
0
struct Krawedz
  {
   size_t wierzcholek;
   unsigned waga;
   Krawedz(size_t wierzcholek,unsigned waga):wierzcholek(wierzcholek),waga(waga) {}
  };
class Graf 
  {
   private:
   vector<vector<Krawedz> > graf;
   public:
   Graf(size_t n) : graf(n) {}
   void wczytaj(size_t m)
     {
      for(size_t i=1;i<=m;++i)
        {
         cout<<"Krawedz "<<i<<": ";
         unsigned w;
         size_t a,b;
         cin>>w>>a>>b;
         --a; --b; // jeżeli wprowadzasz numeracje od 1
         graf[a].push_back(Krawedz(b,w));
         graf[b].push_back(Krawedz(a,w));
        }
     }
   void wyswietl()
     {
      for(int i=0;i<graf.size();++i,cout<<endl)
        {
         cout<<(i+1)<< ":";
         size_t size=wierzcholki[i].size();
         for(int j=0;j<size;++j) cout<<(", "+!j)<<(wierzcholki[i][j].wierzcholek+1)<< "->"<<wierzcholki[i][j].waga;
        }
     }
  };
0

Bardzo pomogłeś, dziękuje.

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