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);
        }