private void PathFind() { erText.Text = ""; try { PathConstanse pathConstanse = new PathConstanse(); PathFinder pathFinder = new PathFinder(pathConstanse, graph); pathFinder.Search(); playerScore = pathConstanse.GetMinLength(); } catch { erText.Text = "Сгенерируйте граф"; } }
public void Search() { List <Edge> edges = new List <Edge>(); List <Edge> pathEdges = new List <Edge>(); Node startNode = null; int min = 0; bool isEnded = false; foreach (Node node in Graph.Nodes) { if (node.Identifier == "s") { startNode = node; } } while (!isEnded) { if (startNode == null) { startNode = pathEdges[pathEdges.Count - 1].End; } foreach (Edge edge in Graph.Edges) { if (edge.Start.Equals(startNode)) { edges.Add(edge); } } for (int i = 0; i < edges.Count - 1; i++) { if (edges[min].Weight > edges[i + 1].Weight) { min = i + 1; } } pathEdges.Add(edges[min]); min = 0; startNode = null; edges.Clear(); if (pathEdges[pathEdges.Count - 1].End.Identifier == "e") { isEnded = true;; } } Path path = new Path(); foreach (Edge edge in pathEdges) { path.AddEdge(edge); } PathConstanse.AddPath(path); PathConstanse.SetShortestPath(); }
public PathFinder(PathConstanse pathConstanse, Graph graph) { PathConstanse = pathConstanse; Graph = graph; }