Pagini recente » Monitorul de evaluare | Cod sursa (job #2909737) | Borderou de evaluare (job #3138143) | Cod sursa (job #2300928) | Cod sursa (job #2168274)
#include <fstream>
#define NMAX 100002
using namespace std;
ifstream fin("dfs.in");
ofstream fout("dfs.out");
struct nod
{
int vf;
struct nod* urm;
};
typedef struct nod* LSI;
LSI L[NMAX];
nod* p[NMAX];
bool viz[NMAX], viz2[NMAX];
int n, m, start, i, comp, nr;
void citire();
void dfs(int);
void bfs(int);
void ins(LSI& L, int x, nod* p);
int main()
{
citire();
for (i=1; i<=n; i++)
if(!viz[i])
{
nr++;
dfs(i);
}
fout<<nr<<'\n';
/*bfs(start);
for(i=1; i<=n; i++)
if(nrpasi[i]==0 && i!=start)
fout<<-1<<' ';
else
fout<<nrpasi[i]<<' ';*/
return 0;
}
void dfs(int x)
{
nod* p;
viz[x]=1;
for (p=L[x]; p!=NULL; p=p->urm)
if (viz[p->vf]==0)
dfs(p->vf);
}
void citire()
{
int x, y, i;
fin>>n>>m;
fin>>start;
for (i=1; i<=m; i++)
{
fin>>x>>y;
ins(L[x], y, NULL);
ins(L[y], x, NULL);
}
}
/*void bfs(int start)
{
int C[NMAX], x, prim, ultim;
nod* q;
C[0]=start;
prim=ultim=0;
viz2[start]=1;
while(prim<=ultim)
{
x=C[prim++];
for(q=L[x]; q; q=q->urm)
if(!viz2[q->vf])
{
viz2[q->vf]=1;
C[++ultim]=q->vf;
nrpasi[q->vf]=nrpasi[x]+1;
}
}
}*/
void ins(LSI& L, int x, nod* p)
{
nod* q = new nod;
q->vf=x;
if (p==NULL)
{
q->urm=L;
L=q;
}
else
{
q->urm = p->urm;
p->urm = q;
}
}