Witam. Mam zaimplementować graf w postaci połączonych list sąsiadów.
Ma to wyglądać w implementacji jak na rysunku na stronie 9 z tego linku:
ftp://sith.ict.pwr.wroc.pl/Teleinformatyka/BOT/4_Wyklad_Grafy.pdf
// piotr.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
struct E
{
int nr_wierzcholka;
int waga;
// wskaznik na kolejny wierzcholek wychodzacy z danego
E* Next;
};
// przypisane na stale do testow
int liczba_wierzcholkow=5;
// utworzenie tablicy wskaznikow (poszczegolne elementy odpowiadaja wierzcholkom)
E* List = new E [liczba_wierzcholkow];
for (int i=0; i<liczba_wierzcholkow; i++)
{
List[i]; // tutaj uzupelnic na co wskazywac ma ten wskaznik
}
// deklaracja tablicy struktur
E** tablica_list = new E* [liczba_wierzcholkow];
for (int i=0; i<liczba_wierzcholkow; i++)
{
tablica_list[i]=new E[liczba_wierzcholkow];
}
// przypisywanie wartosci polom struktury
for (int i=0; i<liczba_wierzcholkow; i++)
{
for (int j=0; j<liczba_wierzcholkow; j++)
{
tablica_list[i][j].nr_wierzcholka=i;
tablica_list[i][j].waga=i;
// jezeli nie ma wiecej wychodzacyh wierzcholkow to wstaw NULL
if (i==(liczba_wierzcholkow-1))
{
tablica_list[i][j].Next=NULL;
}
else
{
// wskaznik na nastepny element tablicy struktur
tablica_list[i][j].Next=List+i+1;
}
}
}
// do poprawy
E* temp = new E;
temp=List;
while (temp!=NULL)
{
cout << temp->nr_wierzcholka;
cout << "\n";
cout << temp->waga;
cout << "\n";
temp=temp->Next;
//temp++;
}
// usuwanie
for (int i=0; i<liczba_wierzcholkow; i++)
{
delete [] tablica_list[i];
}
delete [] tablica_list;
return 0;
}
Mógłbym prosić o jakieś wskazówki jak to sensownie zaimplementować? Nie jestem mistrzem programowania, a rzucili nas od razu na dość głęboką wodę i ciężko mi dojść do rozwiązania tego problemu.