Exemple #1
0
    public static int DistanceClosestToCentralPortByLength(DirectionPath wireA, DirectionPath wireB)
    {
        var bounds              = GetBounds(wireA, wireB);
        var grid                = new GridValue[bounds.size.x, bounds.size.y];
        var gridDistanceA       = new int[bounds.size.x, bounds.size.y];
        var gridDistanceB       = new int[bounds.size.x, bounds.size.y];
        var centralPortPosition = new Vector2Int(Mathf.Abs(bounds.min.x), Mathf.Abs(bounds.min.y));

        grid[centralPortPosition.x, centralPortPosition.y] = GridValue.CentralPort;

        grid = FillGrid(grid, wireA, GridValue.A, GridValue.B, centralPortPosition, gridDistanceA);
        grid = FillGrid(grid, wireB, GridValue.B, GridValue.A, centralPortPosition, gridDistanceB);

        var minDistance = Int32.MaxValue;

        for (int y = grid.GetLength(1) - 1; y >= 0; y--)
        {
            for (int x = 0; x < grid.GetLength(0); x++)
            {
                if (grid[x, y] == GridValue.AB)
                {
                    minDistance = Mathf.Min(minDistance, gridDistanceA[x, y] + gridDistanceB[x, y]);
                }
            }
        }


        return(minDistance);
    }
Exemple #2
0
    public static int DistanceClosestToCentralPort(DirectionPath wireA, DirectionPath wireB)
    {
        var bounds = GetBounds(wireA, wireB);
        var grid   = new GridValue[bounds.size.x, bounds.size.y];
        var centralPortPosition = new Vector2Int(Mathf.Abs(bounds.min.x), Mathf.Abs(bounds.min.y));

        grid[centralPortPosition.x, centralPortPosition.y] = GridValue.CentralPort;

        grid = FillGrid(grid, wireA, GridValue.A, GridValue.B, centralPortPosition);
        grid = FillGrid(grid, wireB, GridValue.B, GridValue.A, centralPortPosition);

        //var str = "";
        var minDistance = Int32.MaxValue;

        for (int y = grid.GetLength(1) - 1; y >= 0; y--)
        {
            for (int x = 0; x < grid.GetLength(0); x++)
            {
                //str += GridValueToChar(grid[x, y]);
                if (grid[x, y] == GridValue.AB)
                {
                    minDistance = Mathf.Min(minDistance, Mathf.Abs(x - centralPortPosition.x) + Mathf.Abs(y - centralPortPosition.y));
                }
            }
            //str += "\n";
        }

        //Debug.Log(str);

        return(minDistance);
    }