Problem of the day
This time our favorite Ninja wants to buy a house. But they are unable to count the number of rooms in the house. So they need your help to count the number of rooms.
Note: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.
Your task is to return the number of rooms. For a better explanation, see the example.
Example: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’.
Output Format:
For each test case, return the number of the separate rooms.
The output of each test case will be printed in a separate line.
Note:
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
2
2
\/
/\
3
/ /
/
/
4
3
In test case 1, We can see there are 4 separate rooms.
In test case 2, we can see there are 3 separate rooms.
1
2
/
/\
3
In test case 1, We can see there are 4 separate rooms.
Try to make graph components of the given matrix by using dfs.
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.
O(N * N), where ‘N’ is the number of strings as well as the length of the strings.
Since we are always visiting each box to check for the character. Thus the time complexity will be O(N * N).
O(N * N), where ‘N’ is the number of strings as well as the length of the strings.
Since we are making a new matrix to make our component finding search easy. Thus the space complexity will be O(N * N).