Example #1
0
File: bfs-dfs.c Project: fannix/poj
bfs(graph *g, int start)
{
	queue q;			/* queue of vertices to visit */
	int v;				/* current vertex */
	int i;				/* counter */

	init_queue(&q);
	enqueue(&q,start);
	discovered[start] = TRUE;

	while (empty(&q) == FALSE) {
		v = dequeue(&q);
		process_vertex(v);
		processed[v] = TRUE;
		for (i=0; i<g->degree[v]; i++) 
		    if (valid_edge(g->edges[v][i]) == TRUE) {
			if (discovered[g->edges[v][i]] == FALSE) {
				enqueue(&q,g->edges[v][i]);
				discovered[g->edges[v][i]] = TRUE;
				parent[g->edges[v][i]] = v;
			}
			if (processed[g->edges[v][i]] == FALSE) 
				process_edge(v,g->edges[v][i]);
		    }
	}
}
Example #2
0
File: bfs-dfs.c Project: fannix/poj
dfs(graph *g, int v)
{
	int i;				/* counter */
	int y;				/* successor vertex */

	if (finished) return;		/* allow for search termination */

	discovered[v] = TRUE;
	process_vertex(v);

	for (i=0; i<g->degree[v]; i++) {
		y = g->edges[v][i];
		if (valid_edge(g->edges[v][i]) == TRUE) {
			if (discovered[y] == FALSE) {
				parent[y] = v;
				dfs(g,y);
			} else 
				if (processed[y] == FALSE)
					process_edge(v,y);
		}
		if (finished) return;
	}

	processed[v] = TRUE;
}
Example #3
0
int bfs(int start, bool process_flag)
{

	queue q;			/* cola con nodos a visitar */
	int v;				/* nodo actual */
	int i;				/* contador */

	init_queue(&q);
	enqueue(&q, start);
	s.discovered[start] = TRUE;

	while(is_empty(&q) == FALSE){
		v = dequeue(&q);
		if (process_flag)
            process_vertex(v);
		for (i=0; i < g.degree[v]; i++){
			if(edge_not_arc(v,g.edges[v][i]) == TRUE) {
				if (s.discovered[g.edges[v][i]] == FALSE) {
					enqueue(&q,g.edges[v][i]);
					s.discovered[g.edges[v][i]] = TRUE;
					s.parent[g.edges[v][i]] = v;
				}
			}
		}
	}
	return 0;
}