private static void CalculateRoute(Route lastRoute, List <Route> routes, IEnumerable <Node> neighbours) { if (lastRoute.IsCompleted) { routes.Add(lastRoute); } else { foreach (Node node in neighbours) { if (lastRoute.AddCheck(node)) { Route currentRoute = lastRoute.Copy(); currentRoute.AddUnchecked(node); CalculateRoute(currentRoute, routes, neighbours); } } } }