コード例 #1
0
ファイル: Islands.cs プロジェクト: pichkorsky/TestTasks
 static private void exploreNeighbors(neighbors neighborsCoords, List <blackDot> blackDotsList, Queue <blackDot> unexploredDotsQueue)
 {
     foreach (neighborCoordinates neighbor in neighborsCoords)
     {
         if (blackDotsList.Any(dot => dot.y == neighbor.y && dot.x == neighbor.x && dot.isMapped == false && dot.isInQue == false))
         {
             blackDot newUnexploredPartOfTheIsland = blackDotsList.Find(dot => dot.y == neighbor.y && dot.x == neighbor.x);
             unexploredDotsQueue.Enqueue(newUnexploredPartOfTheIsland);
             newUnexploredPartOfTheIsland.isInQue = true;
         }
     }
 }
コード例 #2
0
ファイル: Islands.cs プロジェクト: pichkorsky/TestTasks
        // next procedure starts exploratrion from a firstPoint and than maps an island with all other connected black dots

        static private void islandMapper(blackDot firstDot, List <blackDot> blackDotsList)
        {
            Queue <blackDot> unexploredDotsQueue = new Queue <blackDot>();

            unexploredDotsQueue.Enqueue(firstDot);


            while (unexploredDotsQueue.Count > 0)
            {
                blackDot  currentDot            = unexploredDotsQueue.Dequeue();
                neighbors neighborsOfCurrentDot = new neighbors(currentDot);

                exploreNeighbors(neighborsOfCurrentDot, blackDotsList, unexploredDotsQueue);

                currentDot.isMapped = true;
            }
        }
コード例 #3
0
 private void Neighbors(out neighbors neighbs, int I, int J)
 {
     neighbs        = new neighbors();
     neighbs.xleft  = I - 1;
     neighbs.xright = I + 1;
     neighbs.ytop   = J - 1;
     neighbs.ydown  = J + 1;
     if (I - 1 < 0)
     {
         neighbs.xleft = size.X - 1;
     }
     if (I + 1 > size.X - 1)
     {
         neighbs.xright = 0;
     }
     if (J - 1 < 0)
     {
         neighbs.ytop = size.Y - 1;
     }
     if (J + 1 > size.Y - 1)
     {
         neighbs.ydown = 0;
     }
 }
コード例 #4
0
        private int[,] getNeighbor(int[,] board, neighbors neighbor)
        {
            int[,] returnBoard = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };
            int emptyX = -1, emptyY = -1;

            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    returnBoard[i, j] = board[i, j];
                    if (board[i, j] == 0)
                    {
                        emptyX = i;
                        emptyY = j;
                    }
                }
            }

            switch (neighbor)
            {
            case (neighbors.top):
                if (emptyX > 0)
                {
                    returnBoard[emptyX, emptyY]     = board[emptyX - 1, emptyY];
                    returnBoard[emptyX - 1, emptyY] = board[emptyX, emptyY];
                }
                else
                {
                    return(null);
                }
                break;

            case (neighbors.left):
                if (emptyY > 0)
                {
                    returnBoard[emptyX, emptyY]     = board[emptyX, emptyY - 1];
                    returnBoard[emptyX, emptyY - 1] = board[emptyX, emptyY];
                }
                else
                {
                    return(null);
                }
                break;

            case (neighbors.bottom):
                if (emptyX < 2)
                {
                    returnBoard[emptyX, emptyY]     = board[emptyX + 1, emptyY];
                    returnBoard[emptyX + 1, emptyY] = board[emptyX, emptyY];
                }
                else
                {
                    return(null);
                }
                break;

            case (neighbors.right):
                if (emptyY < 2)
                {
                    returnBoard[emptyX, emptyY]     = board[emptyX, emptyY + 1];
                    returnBoard[emptyX, emptyY + 1] = board[emptyX, emptyY];
                }
                else
                {
                    return(null);
                }
                break;
            }

            return(returnBoard);
        }