public List <Node> ShortestPath(string begin, string end) { List <Node> path = new List <Node>(); Graph graph = new Graph(); Node node = new Node(begin, 0); node.Parent = null; graph.nodes.Add(node); path.Add(node); while (node.Name.Equals(end) == false) { node = null; foreach (Node n in graph.nodes) { Node nodeOrigin = this.FNode(n.Name); foreach (Edge edOrigin in nodeOrigin.Edges) { Node auxno = graph.FNode(edOrigin.To.Name); if (auxno == null) { if (node == null || (Convert.ToDouble(n.Info) + edOrigin.Cost) < Convert.ToDouble(n.Info)) { node.Parent = n; path.Add(edOrigin.To); node = new Node(edOrigin.To.Name, Convert.ToDouble(n.Info) + edOrigin.Cost); edOrigin.To.Parent = edOrigin.From; } } } } graph.nodes.Add(node); graph.AddEdge(node.Name, node.Parent.Name, 0); } return(path); }