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;
}