int igraph_i_clusters_leaveout(const igraph_adjlist_t *adjlist, igraph_vector_t *components, igraph_vector_t *leaveout, unsigned long int *mark, igraph_dqueue_t *Q) { /* Another trick: we use the same 'leaveout' vector to mark the * vertices that were already found in the BFS */ long int i, no_of_nodes=igraph_adjlist_size(adjlist); igraph_dqueue_clear(Q); igraph_vector_clear(components); for (i=0; i<no_of_nodes; i++) { if (VECTOR(*leaveout)[i] == *mark) continue; VECTOR(*leaveout)[i]= *mark; igraph_dqueue_push(Q, i); igraph_vector_push_back(components, i); while (!igraph_dqueue_empty(Q)) { long int act_node=(long int) igraph_dqueue_pop(Q); igraph_vector_int_t *neis=igraph_adjlist_get(adjlist, act_node); long int j, n=igraph_vector_int_size(neis); for (j=0; j<n; j++) { long int nei=(long int) VECTOR(*neis)[j]; if (VECTOR(*leaveout)[nei]== *mark) continue; IGRAPH_CHECK(igraph_dqueue_push(Q, nei)); VECTOR(*leaveout)[nei]= *mark; igraph_vector_push_back(components, nei); } } igraph_vector_push_back(components, -1); } UPDATEMARK(); return 0; }
Integer AdjacencyList::size() const throw() { return igraph_adjlist_size(&_); }