cycle_basis — basis of cycle of a simple undirected graph
spc = cycle_basis(g) cycles_list = cycle_basis(g,'list')
First a spanning tree is found by using min_weight_tree and then used to find all fundamental cycles with respect to this tree. They are returned as a set of cycles, each cycle being represented by a set of edges.
The graph g is supposed to be a simple undirected and connected graph
(cycle_basis does not check that the graph is simple, use
graph_simp before calling it if necessary).
spc = cycle_basis(g) returns these cycles in the
sparse matrix spc: each row of this matrix
corresponds to a cycle.
cycles_list = cycle_basis(g,'list') returns these
cycles in the list cycles_list: each entry of this
list is the row vector of the cycle edges index.
//create a directed graph
ta=[1 1 2 2 2 3 4 5 5 7 8 8 9 10 10 10 10 10 11 12 13 13 13 14 15 16 16 17 17];
he=[2 10 3 5 7 4 2 4 6 8 6 9 7 7 11 13 13 15 12 13 9 10 14 11 16 1 17 14 15];
gt=make_graph('foo',1,17,ta,he);
gt.nodes.graphics.x=[283 163 63 57 164 164 273 271 339 384 504 513 439 623 631 757 642]/2;
gt.nodes.graphics.y=[59 133 223 318 227 319 221 324 432 141 209 319 428 443 187 151 301]/2;
show_graph(gt);
//Make simple and undirected
g=graph_simp(gt);
show_graph(g,'new');
//Compute the cycle basis
cycles_list=cycle_basis(g,'list');
//Display the cycles
for c=cycles_list,hilite_edges(c);xpause(1d6),unhilite_edges(c);end;