Witam,
Zabieram się do napisania programu który wyszuka sieżke krytyczna w grafie, za pomocą algorytmu CPM(critical path method). Moje pytanie jak zorgaizowac wczytanie dowolnego grafu ???
Nie ukrywam ze programowanie to jedna z moich slabszych stron, prosze o pomoc i wyrozumialosc :)
jak masz mało wierzchołków to można np. tak:
vector<int> wartoscKtoraPrzechowujeWierzcholek;
vector<vector<bool> > czyJestPolaczenie; // czyli tablica co z czym jest polaczone tj. jeśli istnieje połączenie między wierzchołkiem (x) i (y) to czyJestPolaczenie[x][y] == true
albo tak:
struct Wierzcholek
{
int wartosc;
vector<int> polaczonyZ; // indeksy do wierzcholkow z ktorymi jest polaczony
};
vector<Wierzcholek> wierzcholki; // wszystkie wierzcholki
albo tak:
map<int, int> polaczenia; // do mapy dodajesz indeksy ktore sa polaczone
vector<int> wartoscKtoraPrzechowujeWierzcholek;
w zasadzie wszystko zależy od tego jak wyglądają dane wejściowe, ile jest połączeń, co zamierzasz z tym grafem robić
Wszystko zależy od tego w jakim formacie masz dane.
dane bedą wczytywane na 3 sposoby: z klawiatury, z pliku, generowane losowo. Liczba wierzcholków bedzie dynamiczna
Nie o to chodzi. Chodzi o to:
- czy znasz ilość wierzchołków w grafie przed wczytaniem pierwszego wierzchołka?
- czy znasz ilość krawędzi w grafie zanim wczytasz pierwszą krawędź?
- czy znasz ilość krawędzi wchodzącą/wychodzącą z danego wierzchołka zanim wczytasz pierwszą z tych krawędzi?
- czy znasz ilość wierzchołków w grafie przed wczytaniem pierwszego wierzchołka? - tak, bede znał
- czy znasz ilość krawędzi w grafie zanim wczytasz pierwszą krawędź? tak, bede znał
- czy znasz ilość krawędzi wchodzącą/wychodzącą z danego wierzchołka zanim wczytasz pierwszą z tych krawędzi? tak, bede znal
wczytam to na początku programu
vector<vector<pair<size_t,double> > > Graph;
for(size_t i=0;i<Graph.size();++i)
for(size_t k=0;k<Graph[i].size();++k)
cout<<"wierzchołek "<<i<<" połączony krawędzią z wierzchołkiem "<<Graph[i][k].first<<" z wagą "<<Graph[i][k].second<<endl;