Given a connected undirected graph. Perform a Depth First Traversal of the graph.
Note: Use recursive approach to find the DFS traversal of the graph starting from the 0th vertex from left to right according to the graph..
Example 1:
Input:
Output: 0 1 2 4 3
Explanation:
0 is connected to 1, 2, 4.
1 is connected to 0.
2 is connected to 0.
3 is connected to 4.
4 is connected to 0, 3.
so starting from 0, it will go to 1 then 2
then 4, and then from 4 to 3.
Thus dfs will be 0 1 2 4 3.
Example 2:
Input:
Output: 0 1 2 3
Explanation:
0 is connected to 1 , 3.
1 is connected to 2.
2 is connected to 1.
3 is connected to 0.
so starting from 0, it will go to 1 then 2
then back to 0 then 0 to 3
thus dfs will be 0 1 2 3.
Your task:
You dont need to read input or print anything. Your task is to complete the function dfsOfGraph() which takes the integer V denoting the number of vertices and adjacency list as input parameters and returns a list containing the DFS traversal of the graph starting from the 0th vertex from left to right according to the graph.
Expected Time Complexity: O(V + E)
Expected Auxiliary Space: O(V)
Constraints:
1 ≤ V, E ≤ 104
Ans:
In DFS , we first travel the first given or starting vertex and then anyone vertex adjacent to it. now we traverse other vertex adjacent to second vertex i.e we go into the depth .
code for DFS is :
class Solution {
public:
// Function to return a list containing the DFS traversal of the graph.
void dfs(int v , vector<int>adj[] , vector<bool>&visited ,vector<int>&ans)
{
visited[v] = true;
ans.push_back(v);
for(int i : adj[v])
{
if(!visited[i])
{
dfs(i , adj , visited , ans);
}
}
}
vector<int> dfsOfGraph(int V, vector<int> adj[]) {
vector<int>ans;
vector<bool>visited(V , false);
for(int i = 0 ; i < V ; i++)
{
if(!visited[i])
{
dfs(i , adj , visited , ans);
}
}
return ans;
}
};
References: https://practice.geeksforgeeks.org/problems/depth-first-traversal-for-a-graph/1
Comments
Post a Comment