Pagini recente » Cod sursa (job #713765) | Cod sursa (job #346605) | Cod sursa (job #1847325) | Cod sursa (job #1896292) | Cod sursa (job #696237)
Cod sursa(job #696237)
#include<stdio.h>
#include<cstring>
using namespace std;
FILE *f,*g;
int n,m,st[100002],viz[100002],nr,nrv;
struct nod
{
int v;
nod *adresa;
};
nod *a[100005];
void adaug(int x, int y)
{
nod *p;
p=new nod;
p->v=y;
p->adresa=a[x];
a[x]=p;
}
void citire()
{
int i,x,y;
f=fopen("dfs.in","rt");
fscanf(f,"%d %d",&n,&m);
memset(a,0,sizeof(a));
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d",&x,&y);
adaug(x,y);
adaug(y,x);
}
fclose(f);
}
void dfs()
{
nod *p;
int i,poz,ok;
for(i=1;i<=n;i++)
if(viz[i]==0)
{
nr++;
nrv++;
st[1]=i;
viz[i]=1;
poz=1;
break;
}
while(poz)
{
ok=0;
for(p=a[st[poz]];p;p=p->adresa)
if(viz[p->v]==0)
{
viz[p->v]=1;
poz++;
st[poz]=p->v;
nrv++;
ok=1;
break;
}
if(ok==0)
poz--;
}
if(nrv!=n)
dfs();
}
void scrie()
{
g=fopen("dfs.out","wt");
fprintf(g,"%d",nr);
fclose(g);
}
int main()
{
citire();
dfs();
scrie();
return 0;
}