1
<programlisting linenumbering="numbered"><emphasis>/* -*- mode: C -*- */</emphasis>
2
<emphasis>/* </emphasis>
3
<emphasis> IGraph library.</emphasis>
4
<emphasis> Copyright (C) 2010-2012 Gabor Csardi </emphasis><csardi.gabor@gmail.com>
5
<emphasis> 334 Harvard street, Cambridge, MA 02139 USA</emphasis>
7
<emphasis> This program is free software; you can redistribute it and/or modify</emphasis>
8
<emphasis> it under the terms of the GNU General Public License as published by</emphasis>
9
<emphasis> the Free Software Foundation; either version 2 of the License, or</emphasis>
10
<emphasis> (at your option) any later version.</emphasis>
11
<emphasis> </emphasis>
12
<emphasis> This program is distributed in the hope that it will be useful,</emphasis>
13
<emphasis> but WITHOUT ANY WARRANTY; without even the implied warranty of</emphasis>
14
<emphasis> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</emphasis>
15
<emphasis> GNU General Public License for more details.</emphasis>
16
<emphasis> </emphasis>
17
<emphasis> You should have received a copy of the GNU General Public License</emphasis>
18
<emphasis> along with this program; if not, write to the Free Software</emphasis>
19
<emphasis> Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA </emphasis>
20
<emphasis> 02110-1301 USA</emphasis>
22
<emphasis>*/</emphasis>
24
<emphasis role="strong">#include</emphasis> <igraph.h>
26
int <emphasis role="strong">doit</emphasis>(igraph_t *g) {
28
igraph_vector_ptr_t blocks;
29
<link linkend='igraph_vector_t'>igraph_vector_t</link> cohesion;
30
<link linkend='igraph_vector_t'>igraph_vector_t</link> parent;
34
<emphasis role="strong"><link linkend='igraph_vector_ptr_init'>igraph_vector_ptr_init</link></emphasis>(&blocks, 0);
35
<emphasis role="strong"><link linkend='igraph_vector_init'>igraph_vector_init</link></emphasis>(&cohesion, 0);
36
<emphasis role="strong"><link linkend='igraph_vector_init'>igraph_vector_init</link></emphasis>(&parent, 0);
38
<emphasis role="strong"><link linkend='igraph_cohesive_blocks'>igraph_cohesive_blocks</link></emphasis>(g, &blocks, &cohesion, &parent,
41
<emphasis role="strong">printf</emphasis>("Blocks:\n");
42
<emphasis role="strong">for</emphasis> (i=0; i<<emphasis role="strong"><link linkend='igraph_vector_ptr_size'>igraph_vector_ptr_size</link></emphasis>(&blocks); i++) {
43
<link linkend='igraph_vector_t'>igraph_vector_t</link> *sg=<emphasis role="strong"><link linkend='VECTOR'>VECTOR</link></emphasis>(blocks)[i];
44
<emphasis role="strong">printf</emphasis>(" "); <emphasis role="strong">igraph_vector_print</emphasis>(sg);
45
<emphasis role="strong"><link linkend='igraph_vector_destroy'>igraph_vector_destroy</link></emphasis>(sg);
46
<emphasis role="strong"><link linkend='igraph_free'>igraph_free</link></emphasis>(sg);
48
<emphasis role="strong">printf</emphasis>("Cohesion:\n "); <emphasis role="strong">igraph_vector_print</emphasis>(&cohesion);
49
<emphasis role="strong">printf</emphasis>("Parents:\n "); <emphasis role="strong">igraph_vector_print</emphasis>(&parent);
50
<emphasis role="strong">printf</emphasis>("Block graph:\n"); <emphasis role="strong"><link linkend='igraph_write_graph_edgelist'>igraph_write_graph_edgelist</link></emphasis>(&block_tree, stdout);
52
<emphasis role="strong"><link linkend='igraph_vector_ptr_destroy'>igraph_vector_ptr_destroy</link></emphasis>(&blocks);
53
<emphasis role="strong"><link linkend='igraph_vector_destroy'>igraph_vector_destroy</link></emphasis>(&cohesion);
54
<emphasis role="strong"><link linkend='igraph_vector_destroy'>igraph_vector_destroy</link></emphasis>(&parent);
55
<emphasis role="strong"><link linkend='igraph_destroy'>igraph_destroy</link></emphasis>(&block_tree);
57
<emphasis role="strong">return</emphasis> 0;
60
int <emphasis role="strong">main</emphasis>() {
65
<emphasis>/* --------------------------------------------------------*/</emphasis>
66
<emphasis>/* The graph from the Moody-White paper */</emphasis>
68
<emphasis role="strong"><link linkend='igraph_small'>igraph_small</link></emphasis>(&g, 23, IGRAPH_UNDIRECTED,
69
0,1, 0,2, 0,3, 0,4, 0,5,
75
6,7, 6,10, 6,13, 6,18,
92
<emphasis role="strong">if</emphasis> ( (ret=<emphasis role="strong">doit</emphasis>(&g)) ) { <emphasis role="strong">return</emphasis> ret; }
93
<emphasis role="strong"><link linkend='igraph_destroy'>igraph_destroy</link></emphasis>(&g);
94
<emphasis role="strong">printf</emphasis>("--\n");
96
<emphasis>/* --------------------------------------------------------*/</emphasis>
97
<emphasis>/* A tricky graph, where the separators themselves */</emphasis>
98
<emphasis>/* form a block. But recently we don't include this */</emphasis>
99
<emphasis>/* block in the results. */</emphasis>
101
<emphasis role="strong"><link linkend='igraph_small'>igraph_small</link></emphasis>(&g, 8, IGRAPH_UNDIRECTED,
102
0,1,0,4,0,5, 1,2,1,4,1,5,1,6, 2,3,2,5,2,6,2,7,
103
3,6,3,7, 4,5, 5,6, 6,7,
106
<emphasis role="strong">if</emphasis> ( (ret=<emphasis role="strong">doit</emphasis>(&g)) ) { <emphasis role="strong">return</emphasis> ret; }
107
<emphasis role="strong"><link linkend='igraph_destroy'>igraph_destroy</link></emphasis>(&g);
108
<emphasis role="strong">printf</emphasis>("--\n");
110
<emphasis>/* --------------------------------------------------------*/</emphasis>
111
<emphasis>/* The science camp graph from </emphasis>http://intersci.ss.uci.edu/<emphasis> */</emphasis>
112
<emphasis>/* wiki/index.php/Cohesive_blocking */</emphasis>
114
<emphasis role="strong"><link linkend='igraph_small'>igraph_small</link></emphasis>(&g, 18, IGRAPH_UNDIRECTED,
132
<emphasis role="strong">if</emphasis> ( (ret=<emphasis role="strong">doit</emphasis>(&g)) ) { <emphasis role="strong">return</emphasis> ret; }
133
<emphasis role="strong"><link linkend='igraph_destroy'>igraph_destroy</link></emphasis>(&g);
134
<emphasis role="strong">printf</emphasis>("--\n");
136
<emphasis>/* --------------------------------------------------------*/</emphasis>
137
<emphasis>/* Zachary karate-club */</emphasis>
139
<emphasis role="strong"><link linkend='igraph_small'>igraph_small</link></emphasis>(&g, 34, IGRAPH_UNDIRECTED,
140
0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,10,0,11,0,12,0,13,
142
1,2,1,3,1,7,1,13,1,17,1,19,1,21,1,30,
143
2,3,2,7,2,27,2,28,2,32,2,9,2,8,2,13,
157
23,25,23,27,23,32,23,33,23,29,
169
<emphasis role="strong">if</emphasis> ( (ret=<emphasis role="strong">doit</emphasis>(&g)) ) { <emphasis role="strong">return</emphasis> ret; }
170
<emphasis role="strong"><link linkend='igraph_destroy'>igraph_destroy</link></emphasis>(&g);
171
<emphasis role="strong">printf</emphasis>("--\n");
173
<emphasis role="strong">return</emphasis> 0;