Cod sursa(job #215964)

Utilizator CezarMocanCezar Mocan CezarMocan Data 21 octombrie 2008 20:58:35
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct nod {
	int inf; 
	nod *next;
};

int n, i, a, b, m, nr, j;

nod *g[100100];

int deg[100100], d[100100], viz[100100];

void dfs(int nd) {
	 nod *aux;
     
	 for (aux=g[nd]; aux!=NULL; aux = aux->next) 
		if ( !viz[aux->inf] ) {
			viz[aux->inf]=1;
			dfs(aux->inf);
		}

	 
/*     for (i=0; i<d[nod]; i++) {
         if ( viz[ g[nod][i] ] == 0 ) {
            viz[ g[nod][i] ] = nr;     
            dfs(g[nod][i]);
         }
     }*/
}

int main() {
    
    freopen("dfs.in", "r", stdin);
    freopen("dfs.out", "w", stdout);

	nod *aux;
    
    scanf("%d%d", &n, &m);

	for (i=1; i<=n; i++)
		g[i] = NULL;
    
	for (i=1; i<=m; i++) {
        scanf("%d%d", &a, &b);

        aux = new nod;
		aux -> inf = b;
		aux -> next = g[a];
		g[a] = aux;

		aux = new nod;
		aux -> inf = a;
		aux -> next = g[b];
		g[b] = aux; 
    }
    
    nr=1;
    
    for (i=1; i<=n; i++)
        if ( viz[i] == 0 ) {
           viz[i]=nr;
           dfs(i);
           nr++;
        }
    
    printf("%d\n", nr-1);
    
    return 0;    
}