#include<bits/stdc++.h>
using namespace std;
class graph
{
int v;
list<int> *adj;
public:
graph(int v)
{
this->v=v;
adj=new list<int>[v];
}
void add_edge(int v,int w)
{
adj[v].push_back(w);
adj[w].push_back(v);
}
void dfs(int start,bool visited[]);
void counted(int start);
};
void graph:: dfs(int start,bool visited[])
{
visited[start]=true;
for(auto it=adj[start].begin();it!=adj[start].end();it++)
{
if(!visited[*it])
{
dfs(*it,visited);
}
}
}
void graph:: counted(int start)
{
bool *visited=new bool[v];
for(int i=0;i<v;i++)
visited[i]=false;
int count=0;
visited[start]=true;
for(int k=0;k<v;k++)
{
if(!visited[k])
{
dfs(k,visited);
count++;
}
}
cout<<"count is "<<count<<endl;
}
int main()
{
int v;
cout<<"Enter the number of vertices"<<endl;
cin>>v;
graph g(v);
while(1)
{
int x,y;
cout<<"Enter the nodes"<<endl;
cin>>x>>y;
g.add_edge(x,y);
cout<<"Enter -1 to exit"<<endl;
int t;
cin>>t;
if(t==-1)
break;
}
int t;
cout<<"Enter the start node"<<endl;
cin>>t;
g.counted(t);
return 0;
}
using namespace std;
class graph
{
int v;
list<int> *adj;
public:
graph(int v)
{
this->v=v;
adj=new list<int>[v];
}
void add_edge(int v,int w)
{
adj[v].push_back(w);
adj[w].push_back(v);
}
void dfs(int start,bool visited[]);
void counted(int start);
};
void graph:: dfs(int start,bool visited[])
{
visited[start]=true;
for(auto it=adj[start].begin();it!=adj[start].end();it++)
{
if(!visited[*it])
{
dfs(*it,visited);
}
}
}
void graph:: counted(int start)
{
bool *visited=new bool[v];
for(int i=0;i<v;i++)
visited[i]=false;
int count=0;
visited[start]=true;
for(int k=0;k<v;k++)
{
if(!visited[k])
{
dfs(k,visited);
count++;
}
}
cout<<"count is "<<count<<endl;
}
int main()
{
int v;
cout<<"Enter the number of vertices"<<endl;
cin>>v;
graph g(v);
while(1)
{
int x,y;
cout<<"Enter the nodes"<<endl;
cin>>x>>y;
g.add_edge(x,y);
cout<<"Enter -1 to exit"<<endl;
int t;
cin>>t;
if(t==-1)
break;
}
int t;
cout<<"Enter the start node"<<endl;
cin>>t;
g.counted(t);
return 0;
}
Comments
Post a Comment