Example #1
0
 private void setIdentifier(PizzaSlice slice, int id)
 {
     for (int r = slice.StartRow; r <= slice.EndRow; r++)
     {
         for (int c = slice.StartColumn; c <= slice.EndColumn; c++)
         {
             CutCells[r, c] = id;
         }
     }
 }
Example #2
0
        private bool RegisterCurrentSlice(PizzaSlice slice)
        {
            sliceHash.Add(slice.ID, slice);
            setIdentifier(slice, CurrentSliceID);

            CurrentSliceID++;
            CurrentStartColumn = slice.EndColumn + 1;
            if (slice.EndColumn == Columns - 1 || CutCells[CurrentStartRow, CurrentStartColumn] != 0)
            {
                for (int i = 0; i < Rows; i++)
                {
                    for (int j = 0; j < Columns; j++)
                    {
                        if (CutCells[i, j] == 0)
                        {
                            CurrentStartRow    = i;
                            CurrentStartColumn = j;
                            return(true);
                        }
                    }
                }
                return(false);
            }

            if (slice.EndRow == Rows - 1)
            {
                int notCutCells = 0;
                for (int i = 0; i < Rows; i++)
                {
                    for (int j = 0; j < Columns; j++)
                    {
                        if (CutCells[i, j] == 0)
                        {
                            notCutCells++;
                        }
                    }
                }
                if (notCutCells < 2 * MinIngredientPerSlice)
                {
                    for (int i = 0; i < Rows; i++)
                    {
                        for (int j = 0; j < Columns; j++)
                        {
                            if (CutCells[i, j] == 0)
                            {
                                Cells[i, j] = -1;
                            }
                        }
                    }
                    return(false);
                }
            }

            return(true);
        }
Example #3
0
        public void Cut(int maxBackCount)
        {
            //using (StreamWriter sw = new StreamWriter("../../input/log" + DateTime.Now.ToString("MM-ddTHH-mm-ss")))
            //{
            PizzaSlice cutSlice = null;
            bool       isNotEnd = true;

            while (isNotEnd)
            {
                cutSlice = CutOneSlice();
                if (cutSlice != null)
                {
                    //sw.Write(cutSlice);
                    //sw.WriteLine();
                    isNotEnd = RegisterCurrentSlice(cutSlice);
                }
                else if (isDesertZone)
                {
                    //sw.Write("Desert zone ------- [" + CurrentStartRow + "][" + CurrentStartColumn + "]");
                    //sw.WriteLine();
                    Cells[CurrentStartRow, CurrentStartColumn] = -1;
                    isDesertZone = false;
                    continue;
                }
                else
                {
                    //sw.Write("Recut the slice of ID " + CurrentSliceID + " From Left Neigbour -------");
                    //sw.WriteLine();
                    cutSlice = RecutFromTheAboveSlice(Direction.LEFT);
                    if (cutSlice == null)
                    {
                        RecoverAboveSlices();
                        //sw.Write("Recut the slice of ID " + CurrentSliceID + " From Top Neigbour -------");
                        //sw.WriteLine();
                        cutSlice = RecutFromTheAboveSlice(Direction.TOP);
                    }
                    if (cutSlice == null)
                    {
                        RecoverAboveSlices();
                        //sw.Write("Recut the slice of ID " + CurrentSliceID + " From Right Neigbour -------");
                        //sw.WriteLine();
                        cutSlice = RecutFromTheAboveSlice(Direction.RIGHT);
                    }
                    if (cutSlice != null)
                    {
                        //sw.Write(cutSlice);
                        //sw.WriteLine();
                        isNotEnd = RegisterCurrentSlice(cutSlice);
                    }
                    else
                    {
                        RecoverAboveSlices();
                        int count = 0;
                        while (cutSlice == null && count < maxBackCount)
                        {
                            //sw.Write("Recut the slice of ID " + CurrentSliceID + " From N-1 -------");
                            //sw.WriteLine();
                            cutSlice = RecutFromTheAboveSlice(Direction.MINUS_ONE);
                            count++;
                        }

                        if (count >= maxBackCount)
                        {
                            isDesertZone = true;
                            isNotEnd     = true;
                        }
                        else
                        {
                            //sw.Write(cutSlice);
                            //sw.WriteLine();
                            isNotEnd = RegisterCurrentSlice(cutSlice);
                        }
                    }
                }
            }
            //}
        }