// dodanie nowego wierzcholka private bool AddNewNodes(ExploreNode node) { node.IsExplored = true; // zaznaczenie ze wierzcholek zostal odwiedzony bool[] list = node.GetVisited(); bool result = true; for (int i = 0; i < Size; i++) { if (list[i] == false) { // dodawanie wszystkich pozostalych wierzcholkow oprocz zerowego ExploreNode newNode = new ExploreNode(Counter, node.Node, i, node.GetMatrix(), node.Cost, list, Size, node.Progress, node.Position); ExploreNodes.Add(newNode); // dodanie kolejnego wierzcholka do listy Counter++; if (newNode.Progress == Size) { result = false; } } } if (result == false) { ExploreNode lastNode = FindMinWeightNode(); // szukamy ostatni wierzcholek o najmniejszym koszcie trasy if (lastNode.Progress != Size) // wartosc progress dla ostatniego wierzcholka nie jest rowna liczbie wierzcholkow to znaczy ze trzeba wszyszukac ostatni wierzcholek { result = true; } else { LastNode = lastNode; } } return(result); }
// wyswietlenie wynikow koncowych public void ShowResult() { Console.WriteLine(); Console.WriteLine("Najkrótsza droga ma wartość: " + LastNode.Cost); List <int> road = new List <int>(); road.Add(0); // dodanie wierzchołka zero na koniec drogi road.Add(LastNode.Node); // dodanie ostatniego wierzcholka przed wierzcholkiem koncowym bool next = true; ExploreNode temp = LastNode; // zmienna pomocnicza temp w celu przypisania wszystkich wierzchokow do drogi while (next) { // dodawanie wierzcholkow do drogi od konca do poczatku temp = findNode(temp.ParentPosition); road.Add(temp.Node); if (temp.Node == 0) { next = false; // brak kolejnych wierzcholkow } } // wyswietlenie drogi for (int i = road.Count - 1; i >= 0; i--) { if (i != 0) { Console.Write(road[i] + " --> "); // wyswietlenie wszystkich wierzcholkow oprocz ostatniego } else { Console.Write(road[i]); // wyswietlenie koncowego wierzcholka zero } } }
private ExploreNode FindMinWeightNode() { // szukanie dostepnych wierzcholkow z najmniejsza waga // dostepny wierzcholek to taki, ktory nie zostal wczesniej użyty, ma wartosc IsExplored = false ExploreNode result = ExploreNodes.Find(a => a.IsExplored == false); ExploreNodes.FindAll(a => a.IsExplored == false).ForEach(b => { if (result.Cost > b.Cost) { result = b; } }); return(result); }