int main() { igraph_t g; igraph_vector_t edges; igraph_vector_t vids; igraph_integer_t class; igraph_vector_init_int_end(&edges, -1, 0,1, 1,3, 1,4, 1,6, 3,1, 4,1, 4,2, 6,4, 6,5, 7,8, 8,7, 7,9, 9,7, 8,9, 9,8, -1); igraph_create(&g, &edges, 0, IGRAPH_DIRECTED); igraph_vector_destroy(&edges); igraph_vector_init_int_end(&vids, -1, 1,4,6, -1); igraph_isoclass_subgraph(&g, &vids, &class); printf("class: %i\n", (int)class); igraph_vector_destroy(&vids); igraph_vector_init_int_end(&vids, -1, 0,1,3, -1); igraph_isoclass_subgraph(&g, &vids, &class); printf("class: %i\n", (int)class); igraph_vector_destroy(&vids); igraph_vector_init_int_end(&vids, -1, 7,8,9, -1); igraph_isoclass_subgraph(&g, &vids, &class); printf("class: %i\n", (int)class); igraph_vector_destroy(&vids); igraph_vector_init_int_end(&vids, -1, 0,2,5, -1); igraph_isoclass_subgraph(&g, &vids, &class); printf("class: %i\n", (int)class); igraph_vector_destroy(&vids); igraph_destroy(&g); return 0; }
int main() { igraph_t g; igraph_vector_t weights, result; igraph_bool_t dag; int retval; igraph_vector_init(&result, 0); igraph_set_error_handler(&igraph_error_handler_printignore); /***********************************************************************/ /* Exact solution with integer programming */ /***********************************************************************/ /* Simple unweighted graph */ igraph_small(&g, 0, IGRAPH_DIRECTED, 0,1, 1,2, 2,0, 2,3, 2,4, 0,4, 4,3, 5,0, 6,5, -1); retval = igraph_feedback_arc_set(&g, &result, 0, IGRAPH_FAS_EXACT_IP); if (retval == IGRAPH_UNIMPLEMENTED) return 77; igraph_vector_print(&result); igraph_delete_edges(&g, igraph_ess_vector(&result)); igraph_is_dag(&g, &dag); if (!dag) return 1; igraph_destroy(&g); /* Simple weighted graph */ igraph_small(&g, 0, IGRAPH_DIRECTED, 0,1, 1,2, 2,0, 2,3, 2,4, 0,4, 4,3, 5,0, 6,5, -1); igraph_vector_init_int_end(&weights, -1, 1, 1, 3, 1, 1, 1, 1, 1, 1, -1); igraph_feedback_arc_set(&g, &result, &weights, IGRAPH_FAS_EXACT_IP); igraph_vector_print(&result); igraph_delete_edges(&g, igraph_ess_vector(&result)); igraph_is_dag(&g, &dag); if (!dag) return 2; igraph_vector_destroy(&weights); igraph_destroy(&g); /* Simple unweighted graph with loops */ igraph_small(&g, 0, IGRAPH_DIRECTED, 0,1, 1,2, 2,0, 2,3, 2,4, 0,4, 4,3, 5,0, 6,5, 1,1, 4,4, -1); igraph_feedback_arc_set(&g, &result, 0, IGRAPH_FAS_EXACT_IP); igraph_vector_print(&result); igraph_delete_edges(&g, igraph_ess_vector(&result)); igraph_is_dag(&g, &dag); if (!dag) return 3; igraph_destroy(&g); /* Disjoint union of two almost identical graphs */ igraph_small(&g, 0, IGRAPH_DIRECTED, 0,1, 1,2, 2,0, 2,3, 2,4, 0,4, 4,3, 5,0, 6,5, 1,1, 4,4, 7,8, 8,9, 9,7, 9,10, 9,11, 7,11, 11,10, 12,7, 13,12, -1); igraph_feedback_arc_set(&g, &result, 0, IGRAPH_FAS_EXACT_IP); igraph_vector_print(&result); igraph_delete_edges(&g, igraph_ess_vector(&result)); igraph_is_dag(&g, &dag); if (!dag) return 4; igraph_destroy(&g); /* Graph with lots of isolated vertices */ igraph_small(&g, 10000, IGRAPH_DIRECTED, 0,1, -1); igraph_feedback_arc_set(&g, &result, 0, IGRAPH_FAS_EXACT_IP); igraph_vector_print(&result); igraph_delete_edges(&g, igraph_ess_vector(&result)); igraph_is_dag(&g, &dag); if (!dag) return 5; igraph_destroy(&g); igraph_vector_destroy(&result); return 0; }
int main() { igraph_t g, extd_g; igraph_matrix_t coords; igraph_vector_t edgelist, extd_edgelist, extd_to_orig_eids; igraph_vector_t layers; igraph_matrix_init(&coords, 0, 0); igraph_vector_init(&extd_to_orig_eids, 0); /* Layout on simple graph with predefined layers */ igraph_vector_init_int_end(&layers, -1, 0,1,1,2,3,3,4,4,5, -1); igraph_vector_init_int_end(&edgelist, -1, 0,1, 0,2, 0,3, 1,2, 2,2, 1,4, 2,5, 4,6, 5,7, 6,8, 7,8, 3,8, 8,1, 8,2, -1); igraph_create(&g, &edgelist, 0, 1); igraph_layout_sugiyama(&g, &coords, 0, 0, &layers, /* hgap = */ 1, /* vgap = */ 1, /* maxiter = */ 100, /* weights = */ 0); igraph_matrix_print(&coords); printf("===\n"); /* Same, but this time also return the extended graph */ igraph_layout_sugiyama(&g, &coords, &extd_g, &extd_to_orig_eids, &layers, /* hgap = */ 1, /* vgap = */ 1, /* maxiter = */ 100, /* weights = */ 0); igraph_matrix_print(&coords); printf("===\n"); igraph_vector_init(&extd_edgelist, 0); igraph_get_edgelist(&extd_g, &extd_edgelist, 0); igraph_vector_print(&extd_edgelist); igraph_vector_destroy(&extd_edgelist); igraph_destroy(&extd_g); printf("===\n"); igraph_vector_print(&extd_to_orig_eids); printf("===\n"); igraph_vector_destroy(&layers); /* Same, but with automatic layering */ igraph_layout_sugiyama(&g, &coords, 0, 0, 0, /* hgap = */ 1, /* vgap = */ 1, /* maxiter = */ 100, /* weights = */ 0); igraph_matrix_print(&coords); printf("===\n"); /* Layering with gaps in it */ igraph_vector_init_int_end(&layers, -1, 0,2,2,4,6,6,12,12,15, -1); igraph_layout_sugiyama(&g, &coords, 0, 0, &layers, /* hgap = */ 1, /* vgap = */ 1, /* maxiter = */ 100, /* weights = */ 0); igraph_matrix_print(&coords); igraph_vector_destroy(&layers); printf("===\n"); igraph_vector_destroy(&edgelist); igraph_matrix_destroy(&coords); igraph_vector_destroy(&extd_to_orig_eids); igraph_destroy(&g); return 0; }