Búsqueda+Primero+en+Profundidad+(BFS)


 * BFS**

La estrategia que sigue la búsqueda en profundidad es, como su nombre lo indica, una búsqueda lo más "profunda" posible en el grafo. En está búsqueda, se exploran las aristas adyacentes que salen del nodo más recientemente descubierto v, que tiene aristas que aun no han sido visitados.

Introduction To Algorithms, Cormen et al, 2nd Edition, 2001

Problema [|2469. Friends] de la TJU En resumen consite en encontrar el número de componentes en un grafo, para esto utilizamos el recorrido por profundidad.
 * Ejemplo**

code format="cpp" //2469. Friends TJU - hallar componentes de un grafo (DFS)
 * Implementación** **:D**
 * 1) include
 * 2) include
 * 3) define MAX 102

char m[MAX][MAX]; //matriz de adyacencia char color[MAX]; // int n; //numero de vertices //1 for a connection, 0 non connection

void dfs_visit(int u){ color[u]='1'; //gray color int i;	for (i=1; i<=n; i++){ //revisa las aristas adyacentes no visitadas if (m[u][i]=='1' && color[i]=='0'){ dfs_visit(i); }	}	color[u]='2'; //black color }

main{ int casos,u,v,i,e; scanf ("%d\n",&casos); while (casos--){ memset(m,'0',sizeof(m)); memset(color,'0',sizeof(color)); //blanquea vertices //lee la entrada scanf ("%d %d\n",&n,&e);

for (i=0; i<e;i++){ //lee aristas scanf ("%d %d\n",&u,&v); m[u][v]=m[v][u]='1'; }		//resuelve el problema int count_components=0; for (i=1; i<=n; i++){ if (color[i]=='0'){ //if is blank dfs_visit(i); count_components++; }		}		printf ("%d\n",count_components); } }

code