public void GeneratePaths() { _Grid = ConstructDefaultGrid(_SquareSize); CoordinatePath coordinatePath = new CoordinatePath(); _CoordinatePaths.Add(coordinatePath); RecursivePaths(new Coordinates(0, 0), coordinatePath); PrintOutResults(); }
public CoordinatePath Branch() { CoordinatePath newCoordinates = new CoordinatePath(); List<Coordinates> coordiantes = new List<Coordinates>(); foreach (var coord in this._Coordinates) { coordiantes.Add(new Coordinates(coord.XCoordinate, coord.YCoordinate)); } newCoordinates._Coordinates = coordiantes; return newCoordinates; }
private Coordinates[] GenerateNewValidCoordinates(Coordinates coordinate, CoordinatePath coordinatePath) { List<Coordinates> validCoordiantes = new List<Coordinates>(); Coordinates[] newCordinates = GetNewValidCoordinates(coordinate); foreach (var coord in newCordinates) { if (!IsCoordinateAlreadyVisitedOnPath(coord, coordinatePath)) { validCoordiantes.Add(coord); } } if (validCoordiantes.Count() != 0) { return validCoordiantes.ToArray(); } else { return null; } }
private void AddCoordinateVisitOnPath(Coordinates coordinate, CoordinatePath coordinatePath) { coordinatePath.AddCoordinate(coordinate); }
private void RecursivePaths(Coordinates coordinate,CoordinatePath coordinatePath) { if (IsCoordinateAlreadyVisitedOnPath(coordinate, coordinatePath)) { return; } AddCoordinateVisitOnPath(coordinate, coordinatePath); Coordinates[] newCoordinates = GenerateNewValidCoordinates(coordinate, coordinatePath); if (newCoordinates == null) { return; } Console.WriteLine("number of choices is" + newCoordinates.Length.ToString()); CoordinatePath tmp = coordinatePath.Branch(); for (int i = 0; i < newCoordinates.Length; i++) { if (i == 1) { } //this is the first one CoordinatePath cordinatePathToPassOn; if (i == 0) { cordinatePathToPassOn = coordinatePath; } else { CoordinatePath path = tmp.Branch(); _CoordinatePaths.Add(path); cordinatePathToPassOn = path; } RecursivePaths(newCoordinates[i], cordinatePathToPassOn); } }
private bool IsCoordinateAlreadyVisitedOnPath(Coordinates coordiante, CoordinatePath coordinatePath) { if (coordinatePath.IsCoordinateOnPath(coordiante)) return true; else return false; }