A house is represented by a matrix where “\” and “/” represent a wall and blank space is empty space. We will consider two rooms different if we will be unable to reach another room.
Input: [ “ /” “/\” ] Output: 3 Explanation: 2 X 2 house is shown below:
The first line of input contains an integer 'T' representing the number of test cases. The first line of each test case contains the ‘N’ number of strings. The next ‘N’ lines of each test case contain a single string of length ‘N’.
For each test case, return the number of the separate rooms. The output of each test case will be printed in a separate line.
You do not need to print anything, it has already been taken care of. Just implement the given function.
1 <= T <= 5 2 <= N <= 30 Time limit: 1 sec
First, we will convert our given matrix to a more convenient one so that it would be easy for us to find the number of components in the graph(i.e., Number of rooms). Then we can find the number of components either by depth-first search or disjoint union.
Just magnify each box of the house three times.
The steps are as follows:
After this we will count the number of components by using depth-first search or union-find.
void ‘DFS’(int ‘i’, int ‘j’, vector<vector<int>> &‘newHouse’, int ‘N’)
newHouse[i][j] := 1
We will call dfs again on the following values ('i' + 1, ‘j’), ('i' - 1, ‘j’), ('i', ‘j’ + 1), ('i', ‘j’ - 1), if these values exist in the table and ‘newHouse’ value is 0.
dfs(a, b, ’newHouse’, ’N’);
We are using DFS because it is easy to understand and implement.