#include <igraph.h>

int main(void) {
    igraph_t graph;
    igraph_vector_int_t result;
    igraph_vector_t result_real;
    igraph_int_t edges_array[] = {
        0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8,
        0,10, 0,11, 0,12, 0,13, 0,17, 0,19, 0,21, 0,31,
        1, 2, 1, 3, 1, 7, 1,13, 1,17, 1,19, 1,21, 1,30,
        2, 3, 2, 7, 2,27, 2,28, 2,32, 2, 9, 2, 8, 2,13,
        3, 7, 3,12, 3,13, 4, 6, 4,10, 5, 6, 5,10, 5,16,
        6,16, 8,30, 8,32, 8,33, 9,33, 13,33, 14,32, 14,33,
        15,32, 15,33, 18,32, 18,33, 19,33, 20,32, 20,33,
        22,32, 22,33, 23,25, 23,27, 23,32, 23,33, 23,29,
        24,25, 24,27, 24,31, 25,31, 26,29, 26,33, 27,33,
        28,31, 28,33, 29,32, 29,33, 30,32, 30,33, 31,32,
        31,33, 32,33
    };
    igraph_vector_int_t edges =
        igraph_vector_int_view(edges_array, sizeof(edges_array) / sizeof(edges_array[0]));

    /* Initialize the library. */
    igraph_setup();

    igraph_create(&graph, &edges, 0, IGRAPH_UNDIRECTED);

    igraph_vector_int_init(&result, 0);
    igraph_vector_init(&result_real, 0);

    igraph_degree(&graph, &result, igraph_vss_all(), IGRAPH_ALL, IGRAPH_LOOPS);
    printf("Maximum degree is      %10" IGRAPH_PRId ", vertex %2" IGRAPH_PRId ".\n",
           igraph_vector_int_max(&result),
           igraph_vector_int_which_max(&result));

    igraph_closeness(&graph, &result_real, NULL, NULL, igraph_vss_all(),
                     IGRAPH_ALL, /* weights= */ NULL, /* normalized= */ false);
    printf("Maximum closeness is   %10g, vertex %2" IGRAPH_PRId ".\n",
           (double) igraph_vector_max(&result_real),
           igraph_vector_which_max(&result_real));

    igraph_betweenness(&graph, /* weights= */ NULL, &result_real, igraph_vss_all(),
                       IGRAPH_UNDIRECTED, /* normalized= */ false);
    printf("Maximum betweenness is %10g, vertex %2" IGRAPH_PRId ".\n",
           (double) igraph_vector_max(&result_real),
           igraph_vector_which_max(&result_real));

    igraph_vector_int_destroy(&result);
    igraph_vector_destroy(&result_real);
    igraph_destroy(&graph);

    return 0;
}
