AdvancedAlgorithms.Crank.BreadthFirst C# (CSharp) Method

BreadthFirst() private static method

private static BreadthFirst ( Building block, Building startingPos, int blockRows, int blockColumns ) : int
block Building
startingPos Building
blockRows int
blockColumns int
return int
        private static int BreadthFirst(Building[,] block, Building startingPos, int blockRows, int blockColumns)
        {
            Queue<Building> nodes = new Queue<Building>();
            nodes.Enqueue(startingPos);
            int visitedNodesCount = 0;

            while (nodes.Count != 0)
            {
                Building currentNode = nodes.Dequeue();

                currentNode.Visited = true;

                if (currentNode.Row == blockRows-1 || currentNode.Column == blockColumns-1 || currentNode.Row == 0 || currentNode.Column == 0)
                    visitedNodesCount++;
                //check all adjacencies to find one higher than it

                for (int row = -1; row <= 1; row++)
                {

                    for (int column = -1; column <= 1; column++)
                    {
                        if ((column != 0 && row != 0) || (row == 0 && column == 0))
                            continue;

                        //get point to check
                        int buildingRow = currentNode.Row + row;
                        int buildingColumn = currentNode.Column + column;

                        if (buildingRow < 0 || buildingRow >= blockRows || buildingColumn < 0 || buildingColumn >= blockColumns)
                            continue;

                        Building adjNode = block[buildingRow, buildingColumn];

                        //check if the height is greater than it
                        if (adjNode.height >= currentNode.height && !adjNode.Visited)
                        {
                            //we can go there, add it to the queue
                            if (!nodes.Contains(adjNode))
                                nodes.Enqueue(adjNode);
                        }
                    }

                }
            }

            return visitedNodesCount;
        }