public int porownaj(krawedz a) { if (waga > a.dajWage()) { return(1); } else { return(-1); } }
static void Main(string[] args) { List <List <int> > macierz = new List <List <int> >(); var s = new FileInfo(Directory.GetCurrentDirectory()); var s2 = s.Directory.Parent.Parent; String sciezka = s2.ToString() + "\\dane.csv"; using (var reader = new StreamReader(sciezka)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); List <int> zad = new List <int>(); for (int x = 0; x < values.Length; x++) { zad.Add(Convert.ToInt32(values[x])); } macierz.Add(zad); } } bool flaga = true; for (int x = 1; x <= macierz.Count; x++) { for (int y = x + 1; y <= macierz.Count; y++) { int jeden = dajPole(macierz, x, y); int dwa = dajPole(macierz, y, x); if (jeden != dwa) { flaga = false; } } } if (flaga == false) { Console.WriteLine("Podana macierz nie jest grafem"); Console.ReadKey(); return; } flaga = true; for (int x = 1; x <= macierz.Count; x++) { if (dajPole(macierz, x, x) != 0) { flaga = false; } } if (flaga == false) { Console.WriteLine("Podany graf ma pętle"); Console.ReadKey(); return; } List <wierzcholek> wierzcholki = new List <wierzcholek>(); for (int numer = 1; numer <= macierz.Count; numer++) { wierzcholek nowy = new wierzcholek(numer); List <int> zad = macierz.ElementAt((numer - 1)); for (int i = 1; i <= zad.Count; i++) { int a = i - 1; if (zad.ElementAt(a) != 0) { nowy.dodajSasiada(i); } } wierzcholki.Add(nowy); } foreach (wierzcholek w in wierzcholki) { w.napisz(); } Console.WriteLine(); List <krawedz> krawedzie = new List <krawedz>(); for (int x = 1; x <= macierz.Count; x++) { for (int y = x + 1; y <= macierz.Count; y++) { if (dajPole(macierz, x, y) != 0) { krawedz nowa = new krawedz(x, y, dajPole(macierz, x, y)); krawedzie.Add(nowa); } } } krawedzie.Sort((a, b) => a.porownaj(b)); foreach (krawedz k in krawedzie) { k.napisz(); } List <wierzcholek> drzewo = new List <wierzcholek>(); int max = wierzcholki.Count(); max--; int ile = 0; Console.WriteLine(); while (ile < max) { krawedz dodawana = krawedzie.ElementAt(0); dodaj(drzewo, dodawana); if (czyCykl(drzewo, dodawana.dajA()) == true) { usun(drzewo, dodawana); Console.WriteLine("Nie dodano krawędzi o masie " + dodawana.dajWage()); } else { ile++; Console.WriteLine("Dodano krawędź o masie " + dodawana.dajWage()); } krawedzie.Remove(dodawana); } Console.WriteLine(); Console.WriteLine("Minimalne drzewo rozpinające:"); foreach (wierzcholek w in drzewo) { w.napisz(); } Console.ReadKey(); }