1 : |4,3,2,1, | , , , , | , , , , | 2 : |4,3,2, , | 1, , , , | , , , , | 3 : |4,3, , , | 1, , , , | 2, , , , | 4 : |4,3, , , | , , , , | 2,1, , , | 5 : |4, , , , | 3, , , , | 2,1, , , | 6 : |4,1, , , | 3, , , , | 2, , , , | 7 : |4,1, , , | 3,2, , , | , , , , | 8 : |4, , , , | 3,2,1, , | , , , , | 9 : | , , , , | 3,2,1, , | 4, , , , | 10 : | , , , , | 3,2, , , | 4,1, , , | 11 : |2, , , , | 3, , , , | 4,1, , , | 12 : |2,1, , , | 3, , , , | 4, , , , | 13 : |2,1, , , | , , , , | 4,3, , , | 14 : |2, , , , | 1, , , , | 4,3, , , | 15 : | , , , , | 1, , , , | 4,3,2, , | 16 : | , , , , | , , , , | 4,3,2,1, |Uruchom procedurę dla 5 krążków i rezultat wstaw do sprawozdania.
Zadanie 18 (?)
(Poniżej przedstawiam przy pomocy rysunków niezbędne pojęcia ...)
Co to jest graf ?
Ten rysunek pokazuje przykładowy graf:
 
Co to jest drzewo ?
Jest to graf który nie zawiera cykli; poniższy rysunek pokazuje przykładowe
drzewo:
 
Zauważmy że pojedynczy wierzchołek też jest drzewem.
Zbiór rozłącznych drzew nazywamy lasem.
Co to jest drzewo spinające ?
Jest to drzewo zawarte w grafie, zawierające wszystkie jego wierzchołki;
poniższy rysunek pokazuje przykładowe drzewo spinające:
  
 
 
Szkic algorytmu Kruskala:
Każde drzewo lasu jest reprezentowane przez zbiór wierzchołków (zbiory te są rozłączne).
 
void UtworzZbior(int a)
{
  // tworzy 1-elementowy zbior z reprezentantem "a"
}
int ZnajdzZbior(int a)
{
  // zwraca reprezentanta zbioru zawierajacego "a";
  // jeśli dla elementow "b" i "c" ta funkcja
  // zwroci tego samego reprezentanta, to oznacza to że
  // oba elementy należą do tego samego zbioru !
}
void SumaZbiorow(int a, int b)
{
  // laczy zbior zawierajacy "a" ze zbiorem zawierajacym "b"
  // reprezentantem sumy zbiorow moze byc dowolny jej element
}
void PokazZbiory() // tylko do celow testowych ...
{
}
Graf
ma być reprezentowany przy pomocy odpowiedniej macierzy.
Jeśli jest to graf na N-wierzchołkach
void DodajKrawedz(int v, int u, float Waga)
{
  // dodaje krawędź między wierzchołkami "v" i "u"
  // z wagą równą "Waga"
  // (wagi można przechowywać w osobnej macierzy ...)
}
void PokazGraf() // tylko do celow testowych 
{
}
Należy wypróbować "algorytm Kruskala" w następujący sposób:
main()
{
  printf("\n\n----------------------------------------\n");
  /*
  // prosty przyklad ...
  //
  DodajKrawedz(0,1,1000);
  DodajKrawedz(1,2,999);
  DodajKrawedz(2,0,1000);
  PokazGraf();
  KrawedzieDoTablicy();
  SortujKrawedzie();
  Kruskal();
  PokazDrzewoOrazJegoWage();
  */
  DodajKrawedz(0,1,8);
  DodajKrawedz(1,2,7);
  DodajKrawedz(3,0,4);
  DodajKrawedz(4,1,2);
  DodajKrawedz(1,8,4);
  DodajKrawedz(2,5,9);
  DodajKrawedz(3,6,8);
  DodajKrawedz(6,4,7);
  DodajKrawedz(7,4,6);
  DodajKrawedz(6,7,1);
  DodajKrawedz(7,8,2);
  DodajKrawedz(2,8,14);
  DodajKrawedz(8,5,10);
  PokazGraf();
  KrawedzieDoTablicy();
  SortujKrawedzie();
  Kruskal();
  PokazDrzewoOrazJegoWage();
}