private void SetStartingPoint()
        {
            Point startPoint = Graph.Points.First(); // We can set any point as starting point. I choosed first one.

            VisitedNodes.Add(startPoint);
            UnvisitedNodes.Remove(startPoint);
        }
        public double Run()
        {
            Point toPoint, fromPoint;

            SetStartingPoint();

            for (int i = 0; i < Graph.Dimensions; i++)
            {
                fromPoint = GetCurrentNode();

                if (UnvisitedNodes.Count > 0)   // if we have nodes to visit;
                {
                    toPoint = ChooseNextPoint(fromPoint);
                    VisitedNodes.Add(toPoint);
                    UnvisitedNodes.Remove(toPoint);
                }
                else
                {
                    toPoint = VisitedNodes[0]; // if visited every node, just go back to start
                }

                Edge edge = Graph.GetEdge(fromPoint.Id, toPoint.Id);
                Path.Add(edge);
                TourDistance += edge.Length;
            }

            return(Math.Round(TourDistance));
        }