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); } }