public IList<Node> getListOfBuilding(int[][] grid)
        {
            IList<Node> list = new List<Node>();

            if (grid == null || grid.Length == 0)
                return list;

            int m = grid.Length;
            int n = grid[0].Length;

            for (int i = 0; i < m; i++)
                for (int j = 0; j < n; j++)
                {
                    if (grid[i][j] == BUILDING)
                    {
                        Node node = new Node(i, j);
                        list.Add(node);
                    }

                }
            return list;
        }
        /*
         * Design a BFS function - most challenge one
         * 1. in the range of matrix
           2. is not the building node - original starter
           3. is land node
         *
         * bug 001 - do not allow
         * declare statement:
         *  int x = originalNode.x
         * x scope is bigger than necessary, in while loop area - causing bug
         *
         */
        public void BFS(Node origNode,
            int currDistance,
            ref int[][] dist,
            ref int[][] reach,
            int[][] grid,
            ref bool[][] visited,
            ref Queue<Node> queue
            )
        {
            // add first node into the queue
            fill(origNode.x, origNode.y, origNode.x, origNode.y, currDistance,
                ref dist, ref reach, grid, ref visited, ref queue);

            while (queue.Count > 0)
            {
                Node node = queue.Dequeue();

                int x = node.x; // bug 001
                int y = node.y;

                currDistance++; // BUG-B-02   CANNOT USE ONE VARIABLE FOR DISTANCE - NEED TO SAVE IN THE QUEUE, RETRIEVE FROM QUEUE

                // four directions - call fill function
                fill(x, y, x - 1, y, currDistance, ref dist, ref reach, grid, ref visited, ref queue);
                fill(x, y, x + 1, y, currDistance, ref dist, ref reach, grid, ref visited, ref queue);
                fill(x, y, x, y - 1, currDistance, ref dist, ref reach, grid, ref visited, ref queue);
                fill(x, y, x, y + 1, currDistance, ref dist, ref reach, grid, ref visited, ref queue);
            }
        }