fork download
  1. #include <iostream>
  2. using namespace std;
  3. #include <vector>
  4. #include <queue>
  5.  
  6. using namespace std;
  7.  
  8.  
  9. // 1. Fixed the signature: Passed vis and adj by reference.
  10. // Renamed 'V' to 'src' to avoid confusion with the total number of vertices.
  11. void bfs(int src, vector<vector<int>> &adj, vector<int> &vis) {
  12. vis[src] = 1;
  13. queue<int> q;
  14. q.push(src);
  15.  
  16. while (!q.empty()) {
  17. int v = q.front();
  18. q.pop();
  19. for (auto u : adj[v]) {
  20. if (vis[u] != 1) {
  21. vis[u] = 1;
  22. q.push(u);
  23. }
  24. }
  25. }
  26. }
  27. void dfs(int src, vector<vector<int>> &adj, vector<int> &vis){
  28. vis[src] = 1;
  29. for(auto &u : adj[src]){
  30. if(vis[u] != 1){
  31. vis[u] = 1;
  32. dfs(u,adj,vis);
  33. }
  34. }
  35. }
  36.  
  37. int findNumberOfComponent(int V, vector<vector<int>> &edges) {
  38. // 2. Used standard vector of vectors instead of a VLA
  39. vector<vector<int>> adj(V);
  40. vector<int> vis(V, 0);
  41.  
  42. // Build the adjacency list
  43. for (int i = 0; i < edges.size(); i++) {
  44. adj[edges[i][0]].push_back(edges[i][1]);
  45. adj[edges[i][1]].push_back(edges[i][0]);
  46. }
  47.  
  48. int cnt = 0;
  49. for (int i = 0; i < V; i++) {
  50. if (!vis[i]) {
  51. cnt++;
  52. dfs(i, adj, vis);
  53. }
  54. }
  55.  
  56. return cnt;
  57. }
  58.  
  59. int main() {
  60. int V = 4;
  61. vector<vector<int>> edges = {
  62. {0, 1},
  63. {1, 2}
  64. };
  65. cout<<findNumberOfComponent(V,edges);
  66. }
Success #stdin #stdout 0.01s 5268KB
stdin
Standard input is empty
stdout
2