Pagini recente » Profil rares404 | Monitorul de evaluare | Diferente pentru planificare/sedinta-20081010 intre reviziile 6 si 5 | Diferente pentru problema/benzina intre reviziile 40 si 37 | Cod sursa (job #406989)
Cod sursa(job #406989)
//DFS graf neorientat
#include<stdio.h>
#include<vector>
#define N_max 100001
using namespace std;
vector <int> a[N_max];
int viz[N_max],stv[N_max];
unsigned int n,m,k,comp;
void DFS(int nod);
int main()
{
unsigned int i,x,y;
freopen("dfs.in","r",stdin);
freopen("dfs.out","w",stdout);
scanf("%d%d",&n,&m); //numar de noduri, numar de muchii
for(i=1;i<=m;++i) // lista de vecini
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
i=1;
while(k<n) //parcurge in adancime de pe primul nevizitat;
{
comp++; //numara componentele conexe
for(;viz[i]==1;++i);
DFS(i);
}
printf("%d\n",comp);
return 0;
}
void DFS(int nod)
{
unsigned int i;
viz[nod]=1;k++;
for(i=0;i<a[nod].size();++i)
if(viz[a[nod][i]]==0)
DFS(a[nod][i]);
}