Given a Directed Acyclic Graph (DAG) with V vertices and E edges, Find any Topological Sorting of that Graph.
Example 1:
Input:
Output:
1
Explanation:
The output 1 denotes that the order is
valid. So, if you have, implemented
your function correctly, then output
would be 1 for all test cases.
One possible Topological order for the
graph is 3, 2, 1, 0.
Example 2:
Input:
Output:
1
Explanation:
The output 1 denotes that the order is
valid. So, if you have, implemented
your function correctly, then output
would be 1 for all test cases.
One possible Topological order for the
graph is 5, 4, 2, 1, 3, 0.
Your Task:
You don't need to read input or print anything. Your task is to complete the function topoSort() which takes the integer V denoting the number of vertices and adjacency list as input parameters and returns an array consisting of a the vertices in Topological order. As there are multiple Topological orders possible, you may return any of them. If your returned topo sort is correct then console output will be 1 else 0.
Expected Time Complexity: O(V + E).
Expected Auxiliary Space: O(V).
Constraints:
2 ≤ V ≤ 104
1 ≤ E ≤ (N*(N-1))/2
solution :
class Solution
{
public:
//Function to return list containing vertices in Topological order.
void dfs(int v , stack<int>&st , vector<bool>&visited , vector<int>adj[])
{
visited[v] = true;
vector<int>x = adj[v];
for(int i = 0 ; i < x.size() ; i++)
{
if(!visited[x[i]])
dfs(x[i] , st , visited , adj);
}
st.push(v);
}
vector<int> topoSort(int V, vector<int> adj[])
{
stack<int>st;
vector<bool>visited(V , false);
for(int i = 0 ; i < V ; i++)
{
if(!visited[i])
dfs(i , st ,visited , adj);
}
vector<int>result;
while(!st.empty())
{
int x = st.top();
st.pop();
result.push_back(x);
}
return result;
}
};
Comments
Post a Comment