本文整理汇总了C++中IGRAPH_CHECK函数的典型用法代码示例。如果您正苦于以下问题:C++ IGRAPH_CHECK函数的具体用法?C++ IGRAPH_CHECK怎么用?C++ IGRAPH_CHECK使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IGRAPH_CHECK函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: igraph_i_bridges_rec
static int igraph_i_bridges_rec(const igraph_t *graph, const igraph_inclist_t *il, igraph_integer_t u, igraph_integer_t *time, igraph_vector_t *bridges, igraph_vector_bool_t *visited, igraph_vector_int_t *disc, igraph_vector_int_t *low, igraph_vector_int_t *parent) {
igraph_vector_int_t *incedges;
long nc; /* neighbour count */
long i;
VECTOR(*visited)[u] = 1;
*time += 1;
VECTOR(*disc)[u] = *time;
VECTOR(*low)[u] = *time;
incedges = igraph_inclist_get(il, u);
nc = igraph_vector_int_size(incedges);
for (i=0; i < nc; ++i) {
long edge = (long) VECTOR(*incedges)[i];
igraph_integer_t v = IGRAPH_TO(graph, edge) == u ? IGRAPH_FROM(graph, edge) : IGRAPH_TO(graph, edge);
if (! VECTOR(*visited)[v]) {
VECTOR(*parent)[v] = u;
IGRAPH_CHECK(igraph_i_bridges_rec(graph, il, v, time, bridges, visited, disc, low, parent));
VECTOR(*low)[u] = VECTOR(*low)[u] < VECTOR(*low)[v] ? VECTOR(*low)[u] : VECTOR(*low)[v];
if (VECTOR(*low)[v] > VECTOR(*disc)[u])
IGRAPH_CHECK(igraph_vector_push_back(bridges, edge));
}
else if (v != VECTOR(*parent)[u]) {
VECTOR(*low)[u] = VECTOR(*low)[u] < VECTOR(*disc)[v] ? VECTOR(*low)[u] : VECTOR(*disc)[v];
}
}
return IGRAPH_SUCCESS;
}
示例2: igraph_adjlist_init
int igraph_adjlist_init(const igraph_t *graph, igraph_adjlist_t *al,
igraph_neimode_t mode) {
long int i;
if (mode != IGRAPH_IN && mode != IGRAPH_OUT && mode != IGRAPH_ALL) {
IGRAPH_ERROR("Cannot create adjlist view", IGRAPH_EINVMODE);
}
if (!igraph_is_directed(graph)) { mode=IGRAPH_ALL; }
al->length=igraph_vcount(graph);
al->adjs=igraph_Calloc(al->length, igraph_vector_t);
if (al->adjs == 0) {
IGRAPH_ERROR("Cannot create adjlist view", IGRAPH_ENOMEM);
}
IGRAPH_FINALLY(igraph_adjlist_destroy, al);
for (i=0; i<al->length; i++) {
IGRAPH_ALLOW_INTERRUPTION();
IGRAPH_CHECK(igraph_vector_init(&al->adjs[i], 0));
IGRAPH_CHECK(igraph_neighbors(graph, &al->adjs[i], i, mode));
}
IGRAPH_FINALLY_CLEAN(1);
return 0;
}
示例3: igraph_i_largest_cliques_store
int igraph_i_largest_cliques_store(const igraph_vector_t* clique, void* data, igraph_bool_t* cont) {
igraph_vector_ptr_t* result = (igraph_vector_ptr_t*)data;
igraph_vector_t* vec;
long int i, n;
/* Is the current clique at least as large as the others that we have found? */
if (!igraph_vector_ptr_empty(result)) {
n = igraph_vector_size(clique);
if (n < igraph_vector_size(VECTOR(*result)[0]))
return IGRAPH_SUCCESS;
if (n > igraph_vector_size(VECTOR(*result)[0])) {
for (i = 0; i < igraph_vector_ptr_size(result); i++)
igraph_vector_destroy(VECTOR(*result)[i]);
igraph_vector_ptr_free_all(result);
igraph_vector_ptr_resize(result, 0);
}
}
vec = igraph_Calloc(1, igraph_vector_t);
if (vec == 0)
IGRAPH_ERROR("cannot allocate memory for storing next clique", IGRAPH_ENOMEM);
IGRAPH_CHECK(igraph_vector_copy(vec, clique));
IGRAPH_CHECK(igraph_vector_ptr_push_back(result, vec));
return IGRAPH_SUCCESS;
}
示例4: igraph_empty_attrs
/**
* \ingroup interface
* \function igraph_empty_attrs
* \brief Creates an empty graph with some vertices, no edges and some graph attributes.
*
* </para><para>
* Use this instead of \ref igraph_empty() if you wish to add some graph
* attributes right after initialization. This function is currently
* not very interesting for the ordinary user, just supply 0 here or
* use \ref igraph_empty().
* \param graph Pointer to a not-yet initialized graph object.
* \param n The number of vertices in the graph, a non-negative
* integer number is expected.
* \param directed Whether the graph is directed or not.
* \param attr The attributes.
* \return Error code:
* \c IGRAPH_EINVAL: invalid number of vertices.
*
* Time complexity: O(|V|) for a graph with
* |V| vertices (and no edges).
*/
int igraph_empty_attrs(igraph_t *graph, igraph_integer_t n, igraph_bool_t directed, void* attr) {
if (n<0) {
IGRAPH_ERROR("cannot create empty graph with negative number of vertices",
IGRAPH_EINVAL);
}
if (!IGRAPH_FINITE(n)) {
IGRAPH_ERROR("number of vertices is not finite (NA, NaN or Inf)", IGRAPH_EINVAL);
}
graph->n=0;
graph->directed=directed;
IGRAPH_VECTOR_INIT_FINALLY(&graph->from, 0);
IGRAPH_VECTOR_INIT_FINALLY(&graph->to, 0);
IGRAPH_VECTOR_INIT_FINALLY(&graph->oi, 0);
IGRAPH_VECTOR_INIT_FINALLY(&graph->ii, 0);
IGRAPH_VECTOR_INIT_FINALLY(&graph->os, 1);
IGRAPH_VECTOR_INIT_FINALLY(&graph->is, 1);
VECTOR(graph->os)[0]=0;
VECTOR(graph->is)[0]=0;
/* init attributes */
graph->attr=0;
IGRAPH_CHECK(igraph_i_attribute_init(graph, attr));
/* add the vertices */
IGRAPH_CHECK(igraph_add_vertices(graph, n, 0));
IGRAPH_FINALLY_CLEAN(6);
return 0;
}
示例5: igraph_add_vertices
/**
* \ingroup interface
* \function igraph_add_vertices
* \brief Adds vertices to a graph.
*
* </para><para>
* This function invalidates all iterators.
*
* \param graph The graph object to extend.
* \param nv Non-negative integer giving the number of
* vertices to add.
* \param attr The attributes of the new vertices, only used by
* high level interfaces, you can supply 0 here.
* \return Error code:
* \c IGRAPH_EINVAL: invalid number of new
* vertices.
*
* Time complexity: O(|V|) where
* |V| is
* the number of vertices in the \em new, extended graph.
*/
int igraph_add_vertices(igraph_t *graph, igraph_integer_t nv, void *attr) {
long int ec=igraph_ecount(graph);
long int i;
if (nv < 0) {
IGRAPH_ERROR("cannot add negative number of vertices", IGRAPH_EINVAL);
}
IGRAPH_CHECK(igraph_vector_reserve(&graph->os, graph->n+nv+1));
IGRAPH_CHECK(igraph_vector_reserve(&graph->is, graph->n+nv+1));
igraph_vector_resize(&graph->os, graph->n+nv+1); /* reserved */
igraph_vector_resize(&graph->is, graph->n+nv+1); /* reserved */
for (i=graph->n+1; i<graph->n+nv+1; i++) {
VECTOR(graph->os)[i]=ec;
VECTOR(graph->is)[i]=ec;
}
graph->n += nv;
if (graph->attr) {
IGRAPH_CHECK(igraph_i_attribute_add_vertices(graph, nv, attr));
}
return 0;
}
示例6: igraph_similarity_inverse_log_weighted
int igraph_similarity_inverse_log_weighted(const igraph_t *graph,
igraph_matrix_t *res, const igraph_vs_t vids, igraph_neimode_t mode) {
igraph_vector_t weights;
igraph_neimode_t mode0;
long int i, no_of_nodes;
switch (mode) {
case IGRAPH_OUT: mode0 = IGRAPH_IN; break;
case IGRAPH_IN: mode0 = IGRAPH_OUT; break;
default: mode0 = IGRAPH_ALL;
}
no_of_nodes = igraph_vcount(graph);
IGRAPH_VECTOR_INIT_FINALLY(&weights, no_of_nodes);
IGRAPH_CHECK(igraph_degree(graph, &weights, igraph_vss_all(), mode0, 1));
for (i=0; i < no_of_nodes; i++) {
if (VECTOR(weights)[i] > 1)
VECTOR(weights)[i] = 1.0 / log(VECTOR(weights)[i]);
}
IGRAPH_CHECK(igraph_cocitation_real(graph, res, vids, mode0, &weights));
igraph_vector_destroy(&weights);
IGRAPH_FINALLY_CLEAN(1);
return 0;
}
示例7: igraph_i_eigen_matrix_lapack_common
int igraph_i_eigen_matrix_lapack_common(const igraph_matrix_t *A,
const igraph_eigen_which_t *which,
igraph_vector_complex_t *values,
igraph_matrix_complex_t *vectors) {
igraph_vector_t valuesreal, valuesimag;
igraph_matrix_t vectorsright, *myvectors= vectors ? &vectorsright : 0;
int n=(int) igraph_matrix_nrow(A);
int info=1;
IGRAPH_VECTOR_INIT_FINALLY(&valuesreal, n);
IGRAPH_VECTOR_INIT_FINALLY(&valuesimag, n);
if (vectors) { IGRAPH_MATRIX_INIT_FINALLY(&vectorsright, n, n); }
IGRAPH_CHECK(igraph_lapack_dgeev(A, &valuesreal, &valuesimag,
/*vectorsleft=*/ 0, myvectors, &info));
IGRAPH_CHECK(igraph_i_eigen_matrix_lapack_reorder(&valuesreal,
&valuesimag,
myvectors, which, values,
vectors));
if (vectors) {
igraph_matrix_destroy(&vectorsright);
IGRAPH_FINALLY_CLEAN(1);
}
igraph_vector_destroy(&valuesimag);
igraph_vector_destroy(&valuesreal);
IGRAPH_FINALLY_CLEAN(2);
return 0;
}
示例8: igraph_attribute_combination
int igraph_attribute_combination(igraph_attribute_combination_t *comb, ...) {
va_list ap;
IGRAPH_CHECK(igraph_attribute_combination_init(comb));
va_start(ap, comb);
while (1) {
void *func=0;
igraph_attribute_combination_type_t type;
const char *name;
name=va_arg(ap, const char *);
if (name == IGRAPH_NO_MORE_ATTRIBUTES) { break; }
type=(igraph_attribute_combination_type_t)va_arg(ap, int);
if (type == IGRAPH_ATTRIBUTE_COMBINE_FUNCTION) {
func=va_arg(ap, void*);
}
if (strlen(name)==0) { name=0; }
IGRAPH_CHECK(igraph_attribute_combination_add(comb, name, type, func));
}
示例9: igraph_similarity_jaccard_es
/**
* \ingroup structural
* \function igraph_similarity_jaccard_es
* \brief Jaccard similarity coefficient for a given edge selector.
*
* </para><para>
* The Jaccard similarity coefficient of two vertices is the number of common
* neighbors divided by the number of vertices that are neighbors of at
* least one of the two vertices being considered. This function calculates
* the pairwise Jaccard similarities for the endpoints of edges in a given edge
* selector.
*
* \param graph The graph object to analyze
* \param res Pointer to a vector, the result of the calculation will
* be stored here. The number of elements is the same as the number
* of edges in \p es.
* \param es An edge selector that specifies the edges to be included in the
* result.
* \param mode The type of neighbors to be used for the calculation in
* directed graphs. Possible values:
* \clist
* \cli IGRAPH_OUT
* the outgoing edges will be considered for each node.
* \cli IGRAPH_IN
* the incoming edges will be considered for each node.
* \cli IGRAPH_ALL
* the directed graph is considered as an undirected one for the
* computation.
* \endclist
* \param loops Whether to include the vertices themselves in the neighbor
* sets.
* \return Error code:
* \clist
* \cli IGRAPH_ENOMEM
* not enough memory for temporary data.
* \cli IGRAPH_EINVVID
* invalid vertex id passed.
* \cli IGRAPH_EINVMODE
* invalid mode argument.
* \endclist
*
* Time complexity: O(nd), n is the number of edges in the edge selector, d is
* the (maximum) degree of the vertices in the graph.
*
* \sa \ref igraph_similarity_jaccard() and \ref igraph_similarity_jaccard_pairs()
* to calculate the Jaccard similarity between all pairs of a vertex set or
* some selected vertex pairs, or \ref igraph_similarity_dice(),
* \ref igraph_similarity_dice_pairs() and \ref igraph_similarity_dice_es() for a
* measure very similar to the Jaccard coefficient
*
* \example examples/simple/igraph_similarity.c
*/
int igraph_similarity_jaccard_es(const igraph_t *graph, igraph_vector_t *res,
const igraph_es_t es, igraph_neimode_t mode, igraph_bool_t loops) {
igraph_vector_t v;
igraph_eit_t eit;
IGRAPH_VECTOR_INIT_FINALLY(&v, 0);
IGRAPH_CHECK(igraph_eit_create(graph, es, &eit));
IGRAPH_FINALLY(igraph_eit_destroy, &eit);
while (!IGRAPH_EIT_END(eit)) {
long int eid = IGRAPH_EIT_GET(eit);
igraph_vector_push_back(&v, IGRAPH_FROM(graph, eid));
igraph_vector_push_back(&v, IGRAPH_TO(graph, eid));
IGRAPH_EIT_NEXT(eit);
}
igraph_eit_destroy(&eit);
IGRAPH_FINALLY_CLEAN(1);
IGRAPH_CHECK(igraph_similarity_jaccard_pairs(graph, res, &v, mode, loops));
igraph_vector_destroy(&v);
IGRAPH_FINALLY_CLEAN(1);
return IGRAPH_SUCCESS;
}
示例10: igraph_inclist_init
int igraph_inclist_init(const igraph_t *graph,
igraph_inclist_t *il,
igraph_neimode_t mode) {
long int i;
if (mode != IGRAPH_IN && mode != IGRAPH_OUT && mode != IGRAPH_ALL) {
IGRAPH_ERROR("Cannot create incidence list view", IGRAPH_EINVMODE);
}
if (!igraph_is_directed(graph)) { mode=IGRAPH_ALL; }
il->length=igraph_vcount(graph);
il->incs=igraph_Calloc(il->length, igraph_vector_t);
if (il->incs == 0) {
IGRAPH_ERROR("Cannot create incidence list view", IGRAPH_ENOMEM);
}
IGRAPH_FINALLY(igraph_inclist_destroy, il);
for (i=0; i<il->length; i++) {
IGRAPH_ALLOW_INTERRUPTION();
IGRAPH_CHECK(igraph_vector_init(&il->incs[i], 0));
IGRAPH_CHECK(igraph_incident(graph, &il->incs[i], i, mode));
}
IGRAPH_FINALLY_CLEAN(1);
return 0;
}
示例11: igraph_get_edgelist
int igraph_get_edgelist(const igraph_t *graph, igraph_vector_t *res, igraph_bool_t bycol) {
igraph_eit_t edgeit;
long int no_of_edges=igraph_ecount(graph);
long int vptr=0;
igraph_integer_t from, to;
IGRAPH_CHECK(igraph_vector_resize(res, no_of_edges*2));
IGRAPH_CHECK(igraph_eit_create(graph, igraph_ess_all(IGRAPH_EDGEORDER_ID),
&edgeit));
IGRAPH_FINALLY(igraph_eit_destroy, &edgeit);
if (bycol) {
while (!IGRAPH_EIT_END(edgeit)) {
igraph_edge(graph, IGRAPH_EIT_GET(edgeit), &from, &to);
VECTOR(*res)[vptr]=from;
VECTOR(*res)[vptr+no_of_edges]=to;
vptr++;
IGRAPH_EIT_NEXT(edgeit);
}
} else {
while (!IGRAPH_EIT_END(edgeit)) {
igraph_edge(graph, IGRAPH_EIT_GET(edgeit), &from, &to);
VECTOR(*res)[vptr++]=from;
VECTOR(*res)[vptr++]=to;
IGRAPH_EIT_NEXT(edgeit);
}
}
igraph_eit_destroy(&edgeit);
IGRAPH_FINALLY_CLEAN(1);
return 0;
}
示例12: igraph_is_separator
int igraph_is_separator(const igraph_t *graph,
const igraph_vs_t candidate,
igraph_bool_t *res) {
long int no_of_nodes=igraph_vcount(graph);
igraph_vector_bool_t removed;
igraph_dqueue_t Q;
igraph_vector_t neis;
igraph_vit_t vit;
IGRAPH_CHECK(igraph_vit_create(graph, candidate, &vit));
IGRAPH_FINALLY(igraph_vit_destroy, &vit);
IGRAPH_CHECK(igraph_vector_bool_init(&removed, no_of_nodes));
IGRAPH_FINALLY(igraph_vector_bool_destroy, &removed);
IGRAPH_CHECK(igraph_dqueue_init(&Q, 100));
IGRAPH_FINALLY(igraph_dqueue_destroy, &Q);
IGRAPH_VECTOR_INIT_FINALLY(&neis, 0);
IGRAPH_CHECK(igraph_i_is_separator(graph, &vit, -1, res, &removed,
&Q, &neis, no_of_nodes));
igraph_vector_destroy(&neis);
igraph_dqueue_destroy(&Q);
igraph_vector_bool_destroy(&removed);
igraph_vit_destroy(&vit);
IGRAPH_FINALLY_CLEAN(4);
return 0;
}
示例13: igraph_matrix_complex_imag
int igraph_matrix_complex_imag(const igraph_matrix_complex_t *v,
igraph_matrix_t *imag) {
long int nrow=igraph_matrix_complex_nrow(v);
long int ncol=igraph_matrix_complex_ncol(v);
IGRAPH_CHECK(igraph_matrix_resize(imag, nrow, ncol));
IGRAPH_CHECK(igraph_vector_complex_imag(&v->data, &imag->data));
return 0;
}
示例14: igraph_matrix_complex_real
int igraph_matrix_complex_real(const igraph_matrix_complex_t *v,
igraph_matrix_t *real) {
long int nrow=igraph_matrix_complex_nrow(v);
long int ncol=igraph_matrix_complex_ncol(v);
IGRAPH_CHECK(igraph_matrix_resize(real, nrow, ncol));
IGRAPH_CHECK(igraph_vector_complex_real(&v->data, &real->data));
return 0;
}
示例15: igraph_i_multilevel_simplify_multiple
/* removes multiple edges and returns new edge id's for each edge in |E|log|E| */
int igraph_i_multilevel_simplify_multiple(igraph_t *graph, igraph_vector_t *eids) {
long int ecount = igraph_ecount(graph);
long int i, l = -1, last_from = -1, last_to = -1;
igraph_bool_t directed = igraph_is_directed(graph);
igraph_integer_t from, to;
igraph_vector_t edges;
igraph_i_multilevel_link *links;
/* Make sure there's enough space in eids to store the new edge IDs */
IGRAPH_CHECK(igraph_vector_resize(eids, ecount));
links = igraph_Calloc(ecount, igraph_i_multilevel_link);
if (links == 0) {
IGRAPH_ERROR("multi-level community structure detection failed", IGRAPH_ENOMEM);
}
IGRAPH_FINALLY(free, links);
for (i = 0; i < ecount; i++) {
igraph_edge(graph, (igraph_integer_t) i, &from, &to);
links[i].from = from;
links[i].to = to;
links[i].id = i;
}
qsort((void*)links, (size_t) ecount, sizeof(igraph_i_multilevel_link),
igraph_i_multilevel_link_cmp);
IGRAPH_VECTOR_INIT_FINALLY(&edges, 0);
for (i = 0; i < ecount; i++) {
if (links[i].from == last_from && links[i].to == last_to) {
VECTOR(*eids)[links[i].id] = l;
continue;
}
last_from = links[i].from;
last_to = links[i].to;
igraph_vector_push_back(&edges, last_from);
igraph_vector_push_back(&edges, last_to);
l++;
VECTOR(*eids)[links[i].id] = l;
}
free(links);
IGRAPH_FINALLY_CLEAN(1);
igraph_destroy(graph);
IGRAPH_CHECK(igraph_create(graph, &edges, igraph_vcount(graph), directed));
igraph_vector_destroy(&edges);
IGRAPH_FINALLY_CLEAN(1);
return 0;
}