From 36f1d3327b89fc5a320a5fc14b01231329711b91 Mon Sep 17 00:00:00 2001 From: Filip Hlasek Date: Sun, 16 Aug 2020 21:43:33 -0700 Subject: [PATCH] fix: linter for kosaraju (#1035) * fix: linter for kosaraju * update doxygen parameters --- graph/kosaraju.cpp | 87 +++++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/graph/kosaraju.cpp b/graph/kosaraju.cpp index 00c9d7ca..5949c0bb 100644 --- a/graph/kosaraju.cpp +++ b/graph/kosaraju.cpp @@ -4,77 +4,84 @@ #include #include +#include -using namespace std; /** * Iterative function/method to print graph: - * @param a[] : array of vectors (2D) - * @param V : vertices + * @param a adjacency list representation of the graph + * @param V number of vertices * @return void **/ -void print(vector a[], int V) { +void print(const std::vector< std::vector > &a, int V) { for (int i = 0; i < V; i++) { - if (!a[i].empty()) - cout << "i=" << i << "-->"; - for (int j = 0; j < a[i].size(); j++) cout << a[i][j] << " "; - if (!a[i].empty()) - cout << endl; + if (!a[i].empty()) { + std::cout << "i=" << i << "-->"; + } + for (int j : a[i]) { + std::cout << j << " "; + } + if (!a[i].empty()) { + std::cout << std::endl; + } } } /** * //Recursive function/method to push vertices into stack passed as parameter: - * @param v : vertices - * @param &st : stack passed by reference - * @param vis[] : array to keep track of visited nodes (boolean type) - * @param adj[] : array of vectors to represent graph + * @param v vertices + * @param st stack passed by reference + * @param vis array to keep track of visited nodes (boolean type) + * @param adj adjacency list representation of the graph * @return void **/ -void push_vertex(int v, stack &st, bool vis[], vector adj[]) { - vis[v] = true; +void push_vertex(int v, std::stack *st, std::vector *vis, const std::vector< std::vector > &adj) { + (*vis)[v] = true; for (auto i = adj[v].begin(); i != adj[v].end(); i++) { - if (vis[*i] == false) + if ((*vis)[*i] == false) { push_vertex(*i, st, vis, adj); + } } - st.push(v); + st->push(v); } /** * //Recursive function/method to implement depth first traversal(dfs): - * @param v : vertices - * @param vis[] : array to keep track of visited nodes (boolean type) - * @param grev[] : graph with reversed edges + * @param v vertices + * @param vis array to keep track of visited nodes (boolean type) + * @param grev graph with reversed edges * @return void **/ -void dfs(int v, bool vis[], vector grev[]) { - vis[v] = true; +void dfs(int v, std::vector *vis, const std::vector< std::vector > &grev) { + (*vis)[v] = true; // cout<0)) i.e. it returns the count of (number of) strongly connected components (SCCs) in the graph. (variable 'count_scc' within function) **/ -int kosaraju(int V, vector adj[]) { - bool vis[V] = {}; - stack st; +int kosaraju(int V, const std::vector< std::vector > &adj) { + std::vector vis(V, false); + std::stack st; for (int v = 0; v < V; v++) { - if (vis[v] == false) - push_vertex(v, st, vis, adj); + if (vis[v] == false) { + push_vertex(v, &st, &vis, adj); + } } // making new graph (grev) with reverse edges as in adj[]: - vector grev[V]; + std::vector< std::vector > grev(V); for (int i = 0; i < V + 1; i++) { for (auto j = adj[i].begin(); j != adj[i].end(); j++) { grev[*j].push_back(i); @@ -89,7 +96,7 @@ int kosaraju(int V, vector adj[]) { int t = st.top(); st.pop(); if (vis[t] == false) { - dfs(t, vis, grev); + dfs(t, &vis, grev); count_scc++; } } @@ -101,21 +108,21 @@ int kosaraju(int V, vector adj[]) { // All critical/corner cases have been taken care of. // Input your required values: (not hardcoded) int main() { - int t; - cin >> t; + int t = 0; + std::cin >> t; while (t--) { - int a, b; // a->number of nodes, b->directed edges. - cin >> a >> b; - int m, n; - vector adj[a + 1]; + int a = 0, b = 0; // a->number of nodes, b->directed edges. + std::cin >> a >> b; + int m = 0, n = 0; + std::vector< std::vector > adj(a + 1); for (int i = 0; i < b; i++) // take total b inputs of 2 vertices each // required to form an edge. { - cin >> m >> n; // take input m,n denoting edge from m->n. + std::cin >> m >> n; // take input m,n denoting edge from m->n. adj[m].push_back(n); } // pass number of nodes and adjacency array as parameters to function: - cout << kosaraju(a, adj) << endl; + std::cout << kosaraju(a, adj) << std::endl; } return 0; } -- GitLab