~ubuntu-branches/ubuntu/karmic/maxima/karmic

« back to all changes in this revision

Viewing changes to doc/info/es/graphs.texi

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Sauthier
  • Date: 2009-07-13 15:38:41 UTC
  • mfrom: (3.1.3 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090713153841-gtux06oun30kuuo7
Tags: 5.17.1-1ubuntu1
* Merge from debian unstable, remaining changes (LP: #296643, LP: #242243):
   - debian/maxima-doc.doc-base.{tips, plotting}:
    + Use .shtml instead of .html to fix lintian errors.
   - debian/maxima-emacs.emacsen-install:
    + Install symlinks for source files rather than copying them.  This
      makes find-function work.
    + Install symlink for *.lisp so that we don't need to add
      /usr/share/emacs/site-lisp/maxima to load-path.
  - debian/maxima-emacs.emacsen-startup:
    + Remove use of /usr/share/emacs/site-lisp/maxima, since this
      causes load-path shadows and is not needed anymore.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
@c english version 1.14
 
2
@menu
 
3
* Introducci@'on a graphs::
 
4
* Funciones y variables para graphs::
 
5
@end menu
 
6
 
 
7
@node Introducci@'on a graphs, Funciones y variables para graphs, graphs, graphs
 
8
@section Introducci@'on a graphs
 
9
 
 
10
El paquete @code{graphs} permite trabajar con estructuras de grafos y digrafos en
 
11
Maxima. Tanto los grafos como los digrafos son de estructura simples (no 
 
12
tienen ni aristas múltiples ni bucles), pero los digrafos pueden tener
 
13
una arista dirigida desde @var{u} hasta @var{v} y otra desde @var{v}
 
14
hasta @var{u}.
 
15
 
 
16
Los grafos se representan internamente como listas de adyacencia y se
 
17
implementan como estructuras de lisp. Los v@'ertices se identifican 
 
18
por sus n@'umeros de identificaci@'n (siempre enteros). Las aristas/arcos
 
19
se representan por listas de longitud 2. Se pueden asignar etiquetas a los
 
20
v@'ertices de los grafos/digrafos y pesos a sus aristas/arcos.
 
21
 
 
22
La funci@'on @code{draw_graph} dibuja grafos siguiendo un criterio r@'{@dotless{i}}gido
 
23
de posicionamiento de los v@'ertices. Tambi@'en puede hacer uso del programa graphviz
 
24
disponible en @url{http://www.graphviz.org}. La funci@'n @code{draw_graph} utiliza el paquete 
 
25
@code{draw} de Maxima.
 
26
 
 
27
Para hacer uso de este paquete, ejec@'utese primero @code{load(graphs)}.
 
28
 
 
29
 
 
30
@node Funciones y variables para graphs, , Introducci@'on a graphs, graphs
 
31
@section Funciones y variables para graphs
 
32
 
 
33
@subsection Construyendo grafos
 
34
 
 
35
@deffn {Funci@'on} create_graph (@var{v_list}, @var{e_list})
 
36
@deffnx {Funci@'on} create_graph (@var{n}, @var{e_list})
 
37
@deffnx {Funci@'on} create_graph (@var{v_list}, @var{e_list}, @var{directed})
 
38
 
 
39
Crea un nuevo grafo sobre el conjunto de v@'ertices @var{v_list} con aristas
 
40
@var{e_list}.
 
41
 
 
42
@var{v_list} es una lista de v@'ertices (@code{[v1, v2,..., vn]}) o una lista de
 
43
v@'ertices junto con sus respectivas etiquetas (@code{[[v1,l1], [v2,l2],..., [vn,ln]]}).
 
44
 
 
45
@var{n} es el n@'umero de v@'ertices, los cuales se identificar@'an desde
 
46
0 hasta n-1.
 
47
 
 
48
@var{e_list} es una lista de aristas (@code{[e1, e2,..., em]}) o una lista de
 
49
aristas con sus respectivas ponderaciones (@code{[[e1, w1], ..., [em, wm]]}).
 
50
 
 
51
Si @var{directed} is not @code{false}, se devolver@'a un grafo orientado.
 
52
 
 
53
Ejemplos:
 
54
 
 
55
Crea un ciclo de 3 v@'ertices.
 
56
 
 
57
@c ===beg===
 
58
@c load (graphs)$
 
59
@c g : create_graph([1,2,3], [[1,2], [2,3], [1,3]])$
 
60
@c print_graph(g)$
 
61
@c ===end===
 
62
@example
 
63
(%i1) load (graphs)$
 
64
(%i2) g : create_graph([1,2,3], [[1,2], [2,3], [1,3]])$
 
65
(%i3) print_graph(g)$
 
66
Graph on 3 vertices with 3 edges.
 
67
Adjacencies:
 
68
  3 :  1  2
 
69
  2 :  3  1
 
70
  1 :  3  2
 
71
@end example
 
72
 
 
73
Crea un ciclo de 3 v@'ertices y aristas ponderadas:
 
74
 
 
75
@c ===beg===
 
76
@c load (graphs)$
 
77
@c g : create_graph([1,2,3], [[[1,2], 1.0], [[2,3], 2.0],
 
78
@c                           [[1,3], 3.0]])$
 
79
@c print_graph(g)$
 
80
@c ===end===
 
81
@example
 
82
(%i1) load (graphs)$
 
83
(%i2) g : create_graph([1,2,3], [[[1,2], 1.0], [[2,3], 2.0],
 
84
                                [[1,3], 3.0]])$
 
85
(%i3) print_graph(g)$
 
86
Graph on 3 vertices with 3 edges.
 
87
Adjacencies:
 
88
  3 :  1  2
 
89
  2 :  3  1
 
90
  1 :  3  2
 
91
@end example
 
92
 
 
93
Crea un grafo orientado:
 
94
 
 
95
@c ===beg===
 
96
@c load (graphs)$
 
97
@c d : create_graph(
 
98
@c         [1,2,3,4], 
 
99
@c         [
 
100
@c          [1,3], [1,4],
 
101
@c          [2,3], [2,4]
 
102
@c         ],
 
103
@c         'directed = true)$
 
104
@c print_graph(d)$
 
105
@c ===end===
 
106
@example
 
107
(%i1) load (graphs)$
 
108
(%i2) d : create_graph(
 
109
       [1,2,3,4], 
 
110
       [
 
111
        [1,3], [1,4],
 
112
        [2,3], [2,4]
 
113
       ],
 
114
       'directed = true)$
 
115
(%i3) print_graph(d)$
 
116
Digraph on 4 vertices with 4 arcs.
 
117
Adjacencies:
 
118
  4 :
 
119
  3 :
 
120
  2 :  4  3
 
121
  1 :  4  3
 
122
@end example
 
123
@end deffn
 
124
 
 
125
 
 
126
 
 
127
@deffn {Funci@'on} copy_graph (@var{g})
 
128
Devuelve una copia del grafo @var{g}.
 
129
@end deffn
 
130
 
 
131
@deffn {Funci@'on} circulant_graph (@var{n}, @var{d})
 
132
Devuelve un grafo cirlulante de par@'ametros @var{n} y @var{d}.
 
133
 
 
134
Ejemplo:
 
135
 
 
136
@c ===beg===
 
137
@c load (graphs)$
 
138
@c g : circulant_graph(10, [1,3])$
 
139
@c print_graph(g)$
 
140
@c ===end===
 
141
@example
 
142
(%i1) load (graphs)$
 
143
(%i2) g : circulant_graph(10, [1,3])$
 
144
(%i3) print_graph(g)$
 
145
Graph on 10 vertices with 20 edges.
 
146
Adjacencies:
 
147
  9 :  2  6  0  8
 
148
  8 :  1  5  9  7
 
149
  7 :  0  4  8  6
 
150
  6 :  9  3  7  5
 
151
  5 :  8  2  6  4
 
152
  4 :  7  1  5  3
 
153
  3 :  6  0  4  2
 
154
  2 :  9  5  3  1
 
155
  1 :  8  4  2  0
 
156
  0 :  7  3  9  1
 
157
@end example
 
158
@end deffn
 
159
 
 
160
@deffn {Funci@'on} clebsch_graph ()
 
161
Devuelve el grafo de Clebsch.
 
162
@end deffn
 
163
 
 
164
@deffn {Funci@'on} complement_graph (@var{g})
 
165
Devuelve el complemento del grafo @var{g}.
 
166
@end deffn
 
167
 
 
168
@deffn {Funci@'on} complete_bipartite_graph (@var{n}, @var{m})
 
169
Devuelve el grafo bipartido completo de @var{n+m} v@'ertices.
 
170
@end deffn
 
171
 
 
172
@deffn {Funci@'on} complete_graph (@var{n})
 
173
Devuelve el grafo completo de @var{n} v@'ertices.
 
174
@end deffn
 
175
 
 
176
@deffn {Funci@'on} cycle_digraph (@var{n})
 
177
Devuelve el ciclo dirigido de @var{n} v@'ertices.
 
178
@end deffn
 
179
 
 
180
@deffn {Funci@'on} cycle_graph (@var{n})
 
181
Devuelve el ciclo de @var{n} v@'ertices.
 
182
@end deffn
 
183
 
 
184
@deffn {Funci@'on} cube_graph (@var{n})
 
185
Devuelve el cubo de @var{n} dimensiones.
 
186
@end deffn
 
187
 
 
188
@deffn {Funci@'on} dodecahedron_graph ()
 
189
Devuelve el grafo del dodecaedro.
 
190
@end deffn
 
191
 
 
192
@deffn {Funci@'on} empty_graph (@var{n})
 
193
Devuelve el grafo vac@'{@dotless{i}}o de @var{n} v@'ertices.
 
194
@end deffn
 
195
 
 
196
@deffn {Funci@'on} flower_snark (@var{n})
 
197
Devuelve el grafo de flor de @var{4n} v@'ertices.
 
198
 
 
199
Ejemplo:
 
200
 
 
201
@c ===beg===
 
202
@c load (graphs)$
 
203
@c f5 : flower_snark(5)$
 
204
@c chromatic_index(f5);
 
205
@c ===end===
 
206
@example
 
207
(%i1) load (graphs)$
 
208
(%i2) f5 : flower_snark(5)$
 
209
(%i3) chromatic_index(f5);
 
210
(%o3)                                  4
 
211
@end example
 
212
@end deffn
 
213
 
 
214
@deffn {Funci@'on} from_adjacency_matrix (@var{A})
 
215
Devuelve el grafo definido por la matriz de adyacencia @var{A}.
 
216
@end deffn
 
217
 
 
218
@deffn {Funci@'on} frucht_graph ()
 
219
Devuelve el grafo de Frucht.
 
220
@end deffn
 
221
 
 
222
@deffn {Funci@'on} graph_product (@var{g1}, @var{g1})
 
223
Devuelve el producto dirigido de los grafos @var{g1} y @var{g2}.
 
224
 
 
225
Ejemplo:
 
226
 
 
227
@c ===beg===
 
228
@c load (graphs)$
 
229
@c grid : graph_product(path_graph(3), path_graph(4))$
 
230
@c draw_graph(grid)$
 
231
@c ===end===
 
232
@example
 
233
(%i1) load (graphs)$
 
234
(%i2) grid : graph_product(path_graph(3), path_graph(4))$
 
235
(%i3) draw_graph(grid)$
 
236
@end example
 
237
@end deffn
 
238
 
 
239
@ifhtml
 
240
@image{../figures/graphs01,6cm}
 
241
@end ifhtml
 
242
 
 
243
@deffn {Funci@'on} graph_union (@var{g1}, @var{g1})
 
244
Devuelve la uni@'on (suma) de los grafos @var{g1} y @var{g2}.
 
245
@end deffn
 
246
 
 
247
@deffn {Funci@'on} grid_graph (@var{n}, @var{m})
 
248
Devuelve la rejilla @var{n x m}.
 
249
@end deffn
 
250
 
 
251
@deffn {Funci@'on} grotzch_graph ()
 
252
Devuelve el grafo de Grotzch.
 
253
@end deffn
 
254
 
 
255
@deffn {Funci@'on} heawood_graph ()
 
256
Devuelve el grafo de Heawood.
 
257
@end deffn
 
258
 
 
259
@deffn {Funci@'on} icosahedron_graph ()
 
260
Devuelve el grafo del icosaedro.
 
261
@end deffn
 
262
 
 
263
@deffn {Funci@'on} induced_subgraph (@var{V}, @var{g})
 
264
Devuelve el grafo inducido por el subconjunto @var{V} de v@'ertices del grafo @var{g}.
 
265
 
 
266
Ejemplo:
 
267
 
 
268
@c ===beg===
 
269
@c load (graphs)$
 
270
@c p : petersen_graph()$
 
271
@c V : [0,1,2,3,4]$
 
272
@c g : induced_subgraph(V, p)$
 
273
@c print_graph(g)$
 
274
@c ===end===
 
275
@example
 
276
(%i1) load (graphs)$
 
277
(%i2) p : petersen_graph()$
 
278
(%i3) V : [0,1,2,3,4]$
 
279
(%i4) g : induced_subgraph(V, p)$
 
280
(%i5) print_graph(g)$
 
281
Graph on 5 vertices with 5 edges.
 
282
Adjacencies:
 
283
  4 :  3  0
 
284
  3 :  2  4
 
285
  2 :  1  3
 
286
  1 :  0  2
 
287
  0 :  1  4
 
288
@end example
 
289
@end deffn
 
290
 
 
291
@deffn {Funci@'on} line_graph (@var{g})
 
292
Devuelve el grafo de l@'{@dotless{i}}nea del grafo @var{g}.
 
293
@end deffn
 
294
 
 
295
 
 
296
@deffn {Funci@'on} make_graph (@var{vrt}, @var{f})
 
297
@deffnx {Funci@'on} make_graph (@var{vrt}, @var{f}, @var{oriented})
 
298
Crea un grafo por medio de la funci@'on de predicado @var{f}.
 
299
 
 
300
@var{vrt} es una lista o conjunto de v@'ertices o un simplemente un n@'umero entero.
 
301
Si @var{vrt} es un n@'umero entero, entonces los v@'ertices del grafo ser@'an los
 
302
enteros desde 1 hasta @var{vrt}.
 
303
 
 
304
@var{f} es una funci@'on de predicado. Dos v@'ertices @var{a} y @var{b} se conectar@'an
 
305
si @code{f(a,b)=true}.
 
306
 
 
307
Si @var{directed} no es @var{false}, entonces en grafo ser@'a dirigido.
 
308
 
 
309
Ejemplo 1:
 
310
@c ===beg===
 
311
@c load(graphs)$
 
312
@c g : make_graph(powerset({1,2,3,4,5}, 2), disjointp)$
 
313
@c is_isomorphic(g, petersen_graph());
 
314
@c get_vertex_label(1, g);
 
315
@c ===end===
 
316
@example
 
317
(%i1) load(graphs)$
 
318
(%i2) g : make_graph(powerset(@{1,2,3,4,5@}, 2), disjointp)$
 
319
(%i3) is_isomorphic(g, petersen_graph());
 
320
(%o3)                         true
 
321
(%i4) get_vertex_label(1, g);
 
322
(%o4)                        @{1, 2@}
 
323
@end example
 
324
 
 
325
Ejemplo 2:
 
326
@c ===beg===
 
327
@c load(graphs)$
 
328
@c f(i, j) := is (mod(j, i)=0)$
 
329
@c g : make_graph(20, f, directed=true)$
 
330
@c out_neighbors(4, g);
 
331
@c in_neighbors(18, g);
 
332
@c ===end===
 
333
@example
 
334
(%i1) load(graphs)$
 
335
(%i2) f(i, j) := is (mod(j, i)=0)$
 
336
(%i3) g : make_graph(20, f, directed=true)$
 
337
(%i4) out_neighbors(4, g);
 
338
(%o4)                    [8, 12, 16, 20]
 
339
(%i5) in_neighbors(18, g);
 
340
(%o5)                    [1, 2, 3, 6, 9]
 
341
@end example
 
342
@end deffn
 
343
 
 
344
 
 
345
@deffn {Funci@'on} mycielski_graph (@var{g})
 
346
Devuelve el grafo de Mycielski del grafo @var{g}.
 
347
@end deffn
 
348
 
 
349
@deffn {Funci@'on} new_graph ()
 
350
Devuelve el grafo sin v@'ertices ni aristas.
 
351
@end deffn
 
352
 
 
353
@deffn {Funci@'on} path_digraph (@var{n})
 
354
Devuelve el camino dirigido de @var{n} v@'ertices.
 
355
@end deffn
 
356
 
 
357
@deffn {Funci@'on} path_graph (@var{n})
 
358
Devuelve el camino de @var{n} v@'ertices.
 
359
@end deffn
 
360
 
 
361
@deffn {Funci@'on} petersen_graph ()
 
362
@deffnx {Funci@'on} petersen_graph (@var{n}, @var{d})
 
363
Devuelve el grafo de Petersen @var{P_@{n,d@}}. Los valores por
 
364
defecto para @var{n} y @var{d} son @code{n=5} y @code{d=2}.
 
365
@end deffn
 
366
 
 
367
@deffn {Funci@'on} random_bipartite_graph (@var{a}, @var{b}, @var{p})
 
368
Devuelve un grafo aleatorio bipartido a partir de los v@'ertices @code{a+b}. Cada
 
369
arista se genera con probabilidad @var{p}.
 
370
@end deffn
 
371
 
 
372
@deffn {Funci@'on} random_digraph (@var{n}, @var{p})
 
373
Devuelve un grafo aleatorio dirigido de @var{n} v@'ertices. Cada arco se presenta
 
374
con una probabilidad @var{p}.
 
375
@end deffn
 
376
 
 
377
@deffn {Funci@'on} random_regular_graph (@var{n})
 
378
@deffnx {Funci@'on} random_regular_graph (@var{n}, @var{d})
 
379
Devuelve un grafo aleatorio @var{d}-regular de @var{n} v@'ertices. El valor
 
380
por defecto para @var{d} es @code{d=3}.
 
381
@end deffn
 
382
 
 
383
@deffn {Funci@'on} random_graph (@var{n}, @var{p})
 
384
Devuelve un grafo aleatorio de @var{n} v@'ertices. Cada arco se presenta
 
385
con una probabilidad @var{p}.
 
386
@end deffn
 
387
 
 
388
@deffn {Funci@'on} random_graph1 (@var{n}, @var{m})
 
389
Devuelve un grafo aleatorio de @var{n} v@'ertices y @var{m} arcos aleatorios.
 
390
@end deffn
 
391
 
 
392
@deffn {Funci@'on} random_network (@var{n}, @var{p}, @var{w})
 
393
Devuelve una red aleatoria de @var{n} v@'ertices. Cada arco se presenta 
 
394
con probabilidad @var{p} y tiene un peso dentro del rango @code{[0,w]}.
 
395
La funci@'on devuelve una lista @code{[network, source, sink]}.
 
396
 
 
397
Ejemplo:
 
398
 
 
399
@c ===beg===
 
400
@c load (graphs)$
 
401
@c [net, s, t] : random_network(50, 0.2, 10.0);
 
402
@c max_flow(net, s, t)$
 
403
@c first(%);
 
404
@c ===end===
 
405
@example
 
406
(%i1) load (graphs)$
 
407
(%i2) [net, s, t] : random_network(50, 0.2, 10.0);
 
408
(%o2)                         [DIGRAPH, 50, 51]
 
409
(%i3) max_flow(net, s, t)$
 
410
(%i4) first(%);
 
411
(%o4)                   27.65981397932507
 
412
@end example
 
413
@end deffn
 
414
 
 
415
@deffn {Funci@'on} random_tournament (@var{n})
 
416
Devuelve un torneo aleatorio de @var{n} v@'ertices.
 
417
@end deffn
 
418
 
 
419
@deffn {Funci@'on} random_tree (@var{n})
 
420
Devuelve un @'arbol aleatorio de @var{n} v@'ertices.
 
421
@end deffn
 
422
 
 
423
@deffn {Funci@'on} tutte_graph ()
 
424
Devuelve el grafo de Tutte.
 
425
@end deffn
 
426
 
 
427
@deffn {Funci@'on} underlying_graph (@var{g})
 
428
Devuelve el grafo asociado al grafo orientado @var{g}.
 
429
@end deffn
 
430
 
 
431
@deffn {Funci@'on} wheel_graph (@var{n})
 
432
Devuelve el grafo de rueda de @var{n+1} v@'ertices.
 
433
@end deffn
 
434
 
 
435
@subsection Propiedades de los grafos
 
436
 
 
437
@deffn {Funci@'on} adjacency_matrix (@var{gr})
 
438
Devuelve la matriz de adyacencia del grafo @var{gr}.
 
439
 
 
440
Ejemplo:
 
441
 
 
442
@c ===beg===
 
443
@c load (graphs)$
 
444
@c c5 : cycle_graph(4)$
 
445
@c adjacency_matrix(c5);
 
446
@c ===end===
 
447
@example
 
448
(%i1) load (graphs)$
 
449
(%i2) c5 : cycle_graph(4)$
 
450
(%i3) adjacency_matrix(c5);
 
451
                                [ 0  1  0  1 ]
 
452
                                [            ]
 
453
                                [ 1  0  1  0 ]
 
454
(%o3)                           [            ]
 
455
                                [ 0  1  0  1 ]
 
456
                                [            ]
 
457
                                [ 1  0  1  0 ]
 
458
@end example
 
459
@end deffn
 
460
 
 
461
@deffn {Funci@'on} average_degree (@var{gr})
 
462
Devuelve el grado medio de los v@'ertices del garfo @var{gr}.
 
463
 
 
464
Ejemplo:
 
465
 
 
466
@c ===beg===
 
467
@c load (graphs)$
 
468
@c average_degree(grotzch_graph());
 
469
@c ===end===
 
470
@example
 
471
(%i1) load (graphs)$
 
472
(%i2) average_degree(grotzch_graph());
 
473
                                      40
 
474
(%o2)                                 --
 
475
                                      11
 
476
@end example
 
477
@end deffn
 
478
 
 
479
@deffn {Funci@'on} biconected_components (@var{gr})
 
480
Devuelve los subconjuntos de v@'ertices biconectados del grafo @var{gr}.
 
481
 
 
482
Ejemplo:
 
483
 
 
484
@c ===beg===
 
485
@c load (graphs)$
 
486
@c g : create_graph(
 
487
@c             [1,2,3,4,5,6,7],
 
488
@c             [
 
489
@c              [1,2],[2,3],[2,4],[3,4],
 
490
@c              [4,5],[5,6],[4,6],[6,7]
 
491
@c             ])$
 
492
@c biconnected_components(g);
 
493
@c ===end===
 
494
@example
 
495
(%i1) load (graphs)$
 
496
(%i2) g : create_graph(
 
497
            [1,2,3,4,5,6,7],
 
498
            [
 
499
             [1,2],[2,3],[2,4],[3,4],
 
500
             [4,5],[5,6],[4,6],[6,7]
 
501
            ])$
 
502
(%i3) biconnected_components(g);
 
503
(%o3)               [[6, 7], [4, 5, 6], [1, 2], [2, 3, 4]]
 
504
@end example
 
505
 
 
506
@ifhtml
 
507
@image{../figures/graphs13,6cm}
 
508
@end ifhtml
 
509
@end deffn
 
510
 
 
511
@deffn {Funci@'on} bipartition (@var{gr})
 
512
Devuelve una bipartici@'on de los v@'ertices del grafo @var{gr}, o una
 
513
lista vac@'{@dotless{i}}a si @var{gr} no es bipartido.
 
514
 
 
515
Ejemplo:
 
516
 
 
517
@c ===beg===
 
518
@c load (graphs)$
 
519
@c h : heawood_graph()$
 
520
@c [A,B]:bipartition(h);
 
521
@c draw_graph(h, show_vertices=A, program=circular)$
 
522
@c ===end===
 
523
@example
 
524
(%i1) load (graphs)$
 
525
(%i2) h : heawood_graph()$
 
526
(%i3) [A,B]:bipartition(h);
 
527
(%o3)         [[8, 12, 6, 10, 0, 2, 4], [13, 5, 11, 7, 9, 1, 3]]
 
528
(%i4) draw_graph(h, show_vertices=A, program=circular)$
 
529
@end example
 
530
@end deffn
 
531
 
 
532
@ifhtml
 
533
@image{../figures/graphs02,6cm}
 
534
@end ifhtml
 
535
 
 
536
@deffn {Funci@'on} chromatic_index (@var{gr})
 
537
Devuelve el @'{@dotless{i}}ndice crom@'atico del grafo @var{gr}.
 
538
 
 
539
Ejemplo:
 
540
 
 
541
@c ===beg===
 
542
@c load (graphs)$
 
543
@c p : petersen_graph()$
 
544
@c chromatic_index(p);
 
545
@c ===end===
 
546
@example
 
547
(%i1) load (graphs)$
 
548
(%i2) p : petersen_graph()$
 
549
(%i3) chromatic_index(p);
 
550
(%o3)                                  4
 
551
@end example
 
552
@end deffn
 
553
 
 
554
@deffn {Funci@'on} chromatic_number (@var{gr})
 
555
Devuelve el n@'umero crom@'atico del grafo @var{gr}.
 
556
 
 
557
Ejemplo:
 
558
 
 
559
@c ===beg===
 
560
@c load (graphs)$
 
561
@c chromatic_number(cycle_graph(5));
 
562
@c chromatic_number(cycle_graph(6));
 
563
@c ===end===
 
564
@example
 
565
(%i1) load (graphs)$
 
566
(%i2) chromatic_number(cycle_graph(5));
 
567
(%o2)                                  3
 
568
(%i3) chromatic_number(cycle_graph(6));
 
569
(%o3)                                  2
 
570
@end example
 
571
@end deffn
 
572
 
 
573
@deffn {Funci@'on} clear_edge_weight (@var{e}, @var{gr})
 
574
Elimina el peso del arco @var{e} del grafo @var{gr}.
 
575
 
 
576
Ejemplo:
 
577
 
 
578
@c ===beg===
 
579
@c load (graphs)$
 
580
@c g : create_graph(3, [[[0,1], 1.5], [[1,2], 1.3]])$
 
581
@c get_edge_weight([0,1], g);
 
582
@c clear_edge_weight([0,1], g)$
 
583
@c get_edge_weight([0,1], g);
 
584
@c ===end===
 
585
@example
 
586
(%i1) load (graphs)$
 
587
(%i2) g : create_graph(3, [[[0,1], 1.5], [[1,2], 1.3]])$
 
588
(%i3) get_edge_weight([0,1], g);
 
589
(%o3)                                 1.5
 
590
(%i4) clear_edge_weight([0,1], g)$
 
591
(%i5) get_edge_weight([0,1], g);
 
592
(%o5)                                  1
 
593
@end example
 
594
@end deffn
 
595
 
 
596
@deffn {Funci@'on} clear_vertex_label (@var{v}, @var{gr})
 
597
Elimina la etiqueta del v@'ertice @var{v} del grafo @var{gr}.
 
598
 
 
599
Ejemplo:
 
600
 
 
601
@c ===beg===
 
602
@c load (graphs)$
 
603
@c g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
 
604
@c get_vertex_label(0, g);
 
605
@c clear_vertex_label(0, g);
 
606
@c get_vertex_label(0, g);
 
607
@c ===end===
 
608
@example
 
609
(%i1) load (graphs)$
 
610
(%i2) g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
 
611
(%i3) get_vertex_label(0, g);
 
612
(%o3)                               Zero
 
613
(%i4) clear_vertex_label(0, g);
 
614
(%o4)                               done
 
615
(%i5) get_vertex_label(0, g);
 
616
(%o5)                               false
 
617
@end example
 
618
@end deffn
 
619
 
 
620
@deffn {Funci@'on} connected_components (@var{gr})
 
621
Devuelve las componentes conexas del grafo @var{gr}.
 
622
 
 
623
Ejemplo:
 
624
 
 
625
@c ===beg===
 
626
@c load (graphs)$
 
627
@c g: graph_union(cycle_graph(5), path_graph(4))$
 
628
@c connected_components(g);
 
629
@c ===end===
 
630
@example
 
631
(%i1) load (graphs)$
 
632
(%i2) g: graph_union(cycle_graph(5), path_graph(4))$
 
633
(%i3) connected_components(g);
 
634
(%o3)                  [[1, 2, 3, 4, 0], [8, 7, 6, 5]]
 
635
@end example
 
636
@end deffn
 
637
 
 
638
@deffn {Funci@'on} diameter (@var{gr})
 
639
Devuelve el di@'ametro del grafo @var{gr}.
 
640
 
 
641
Ejemplo:
 
642
 
 
643
@c ===beg===
 
644
@c load (graphs)$
 
645
@c diameter(dodecahedron_graph());
 
646
@c ===end===
 
647
@example
 
648
(%i1) load (graphs)$
 
649
(%i2) diameter(dodecahedron_graph());
 
650
(%o2)                                 5
 
651
@end example
 
652
@end deffn
 
653
 
 
654
@deffn {Funci@'on} edge_coloring (@var{gr})
 
655
Devuelve una coloraci@'on @'optima de los arcos del grafo @var{gr}.
 
656
 
 
657
La funci@'on devuelve el @'{@dotless{i}}ndice crom@'atico y una lista
 
658
que representa el coloreado de los arcos de @var{gr}.
 
659
 
 
660
Ejemplo:
 
661
 
 
662
@c ===beg===
 
663
@c load (graphs)$
 
664
@c p : petersen_graph()$
 
665
@c [ch_index, col] : edge_coloring(p);
 
666
@c assoc([0,1], col);
 
667
@c assoc([0,5], col);
 
668
@c ===end===
 
669
@example
 
670
(%i1) load (graphs)$
 
671
(%i2) p : petersen_graph()$
 
672
(%i3) [ch_index, col] : edge_coloring(p);
 
673
(%o3) [4, [[[0, 5], 3], [[5, 7], 1], [[0, 1], 1], [[1, 6], 2], 
 
674
[[6, 8], 1], [[1, 2], 3], [[2, 7], 4], [[7, 9], 2], [[2, 3], 2], 
 
675
[[3, 8], 3], [[5, 8], 2], [[3, 4], 1], [[4, 9], 4], [[6, 9], 3], 
 
676
[[0, 4], 2]]]
 
677
(%i4) assoc([0,1], col);
 
678
(%o4)                           1
 
679
(%i5) assoc([0,5], col);
 
680
(%o5)                           3
 
681
@end example
 
682
@end deffn
 
683
 
 
684
@deffn {Funci@'on} degree_sequence (@var{gr})
 
685
Devuelve una lista con los grados de los v@'ertices del grafo @var{gr}.
 
686
 
 
687
Ejemplo:
 
688
 
 
689
@c ===beg===
 
690
@c load (graphs)$
 
691
@c degree_sequence(random_graph(10, 0.4));
 
692
@c ===end===
 
693
@example
 
694
(%i1) load (graphs)$
 
695
(%i2) degree_sequence(random_graph(10, 0.4));
 
696
(%o2)            [2, 2, 2, 2, 2, 2, 3, 3, 3, 3]
 
697
@end example
 
698
@end deffn
 
699
 
 
700
@deffn {Funci@'on} edge_connectivity (@var{gr})
 
701
Devuelve la conectividad de las aristas del grafo @var{gr}.
 
702
 
 
703
V@'ease tambi@'en @code{min_edge_cut}.
 
704
@end deffn
 
705
 
 
706
@deffn {Funci@'on} edges (@var{gr})
 
707
Devuelve la lista de las aristas (arcos) del grafo (dirigido) @var{gr}.
 
708
 
 
709
Ejemplo:
 
710
 
 
711
@c ===beg===
 
712
@c load (graphs)$
 
713
@c edges(complete_graph(4));
 
714
@c ===end===
 
715
@example
 
716
(%i1) load (graphs)$
 
717
(%i2) edges(complete_graph(4));
 
718
(%o2)         [[2, 3], [1, 3], [1, 2], [0, 3], [0, 2], [0, 1]]
 
719
@end example
 
720
@end deffn
 
721
 
 
722
@deffn {Funci@'on} get_edge_weight (@var{e}, @var{gr})
 
723
@deffnx {Funci@'on} get_edge_weight (@var{e}, @var{gr}, @var{ifnot})
 
724
Devuelve el peso de la arista @var{e} del grafo @var{gr}.
 
725
 
 
726
Si la arista no tiene peso, la funci@'on devuelve 1. Si la arista no
 
727
pertenece al grafo, la funci@'on emite un mensaje de error o devuelve
 
728
el argumento opcional @var{ifnot}.
 
729
 
 
730
Ejemplo:
 
731
 
 
732
@c ===beg===
 
733
@c load (graphs)$
 
734
@c c5 : cycle_graph(5)$
 
735
@c get_edge_weight([1,2], c5);
 
736
@c set_edge_weight([1,2], 2.0, c5);
 
737
@c get_edge_weight([1,2], c5);
 
738
@c ===end===
 
739
@example
 
740
(%i1) load (graphs)$
 
741
(%i2) c5 : cycle_graph(5)$
 
742
(%i3) get_edge_weight([1,2], c5);
 
743
(%o3)                                 1
 
744
(%i4) set_edge_weight([1,2], 2.0, c5);
 
745
(%o4)                               done
 
746
(%i5) get_edge_weight([1,2], c5);
 
747
(%o5)                                2.0
 
748
@end example
 
749
@end deffn
 
750
 
 
751
@deffn {Funci@'on} get_vertex_label (@var{v}, @var{gr})
 
752
Devuelve la etiqueta del v@'ertice @var{v} del grafo @var{gr}.
 
753
 
 
754
Ejemplo:
 
755
 
 
756
@c ===beg===
 
757
@c load (graphs)$
 
758
@c g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
 
759
@c get_vertex_label(0, g);
 
760
@c ===end===
 
761
@example
 
762
(%i1) load (graphs)$
 
763
(%i2) g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
 
764
(%i3) get_vertex_label(0, g);
 
765
(%o3)                               Zero
 
766
@end example
 
767
@end deffn
 
768
 
 
769
@deffn {Funci@'on} graph_charpoly (@var{gr}, @var{x})
 
770
Devuelve el polinomio caracter@'{@dotless{i}}stico (de variable @var{x})
 
771
del grafo @var{gr}.
 
772
 
 
773
Ejemplo:
 
774
 
 
775
@c ===beg===
 
776
@c load (graphs)$
 
777
@c p : petersen_graph()$
 
778
@c graph_charpoly(p, x), factor;
 
779
@c ===end===
 
780
@example
 
781
(%i1) load (graphs)$
 
782
(%i2) p : petersen_graph()$
 
783
(%i3) graph_charpoly(p, x), factor;
 
784
                                         5        4
 
785
(%o3)                     (x - 3) (x - 1)  (x + 2)
 
786
@end example
 
787
@end deffn
 
788
 
 
789
@deffn {Funci@'on} graph_center (@var{gr})
 
790
Devuelve el centro del grafo @var{gr}.
 
791
 
 
792
Ejemplo:
 
793
 
 
794
@c ===beg===
 
795
@c load (graphs)$
 
796
@c g : grid_graph(5,5)$
 
797
@c graph_center(g);
 
798
@c ===end===
 
799
@example
 
800
(%i1) load (graphs)$
 
801
(%i2) g : grid_graph(5,5)$
 
802
(%i3) graph_center(g);
 
803
(%o3)                               [12]
 
804
@end example
 
805
@end deffn
 
806
 
 
807
@deffn {Funci@'on} graph_eigenvalues (@var{gr})
 
808
Devuelve los valores propios del grafo @var{gr}. La funci@'on
 
809
devuelve los valores propios en el mismo formato en el que lo 
 
810
hace la funci@'on @code{eigenvalue}.
 
811
 
 
812
Ejemplo:
 
813
 
 
814
@c ===beg===
 
815
@c load (graphs)$
 
816
@c p : petersen_graph()$
 
817
@c graph_eigenvalues(p);
 
818
@c ===end===
 
819
@example
 
820
(%i1) load (graphs)$
 
821
(%i2) p : petersen_graph()$
 
822
(%i3) graph_eigenvalues(p);
 
823
(%o3)                     [[3, - 2, 1], [1, 4, 5]]
 
824
@end example
 
825
@end deffn
 
826
 
 
827
@deffn {Funci@'on} graph_periphery (@var{gr})
 
828
Devuelve la periferia del grafo @var{gr}.
 
829
 
 
830
Ejemplo:
 
831
 
 
832
@c ===beg===
 
833
@c load (graphs)$
 
834
@c g : grid_graph(5,5)$
 
835
@c graph_periphery(g);
 
836
@c ===end===
 
837
@example
 
838
(%i1) load (graphs)$
 
839
(%i2) g : grid_graph(5,5)$
 
840
(%i3) graph_periphery(g);
 
841
(%o3)                          [24, 20, 4, 0]
 
842
@end example
 
843
@end deffn
 
844
 
 
845
@deffn {Funci@'on} graph_size (@var{gr})
 
846
Devuelve el n@'umero de aristas del grafo @var{gr}.
 
847
 
 
848
Ejemplo:
 
849
 
 
850
@c ===beg===
 
851
@c load (graphs)$
 
852
@c p : petersen_graph()$
 
853
@c graph_size(p);
 
854
@c ===end===
 
855
@example
 
856
(%i1) load (graphs)$
 
857
(%i2) p : petersen_graph()$
 
858
(%i3) graph_size(p);
 
859
(%o3)                                15
 
860
@end example
 
861
@end deffn
 
862
 
 
863
@deffn {Funci@'on} graph_order (@var{gr})
 
864
Devuelve el n@'umero de v@'ertices del grafo @var{gr}.
 
865
 
 
866
Ejemplo:
 
867
 
 
868
@c ===beg===
 
869
@c load (graphs)$
 
870
@c p : petersen_graph()$
 
871
@c graph_order(p);
 
872
@c ===end===
 
873
@example
 
874
(%i1) load (graphs)$
 
875
(%i2) p : petersen_graph()$
 
876
(%i3) graph_order(p);
 
877
(%o3)                                10
 
878
@end example
 
879
@end deffn
 
880
 
 
881
@deffn {Funci@'on} girth (@var{gr})
 
882
Devuelve la longitud del ciclo m@'as corto del grafo @var{gr}.
 
883
 
 
884
Ejemplo:
 
885
 
 
886
@c ===beg===
 
887
@c load (graphs)$
 
888
@c g : heawood_graph()$
 
889
@c girth(g);
 
890
@c ===end===
 
891
@example
 
892
(%i1) load (graphs)$
 
893
(%i2) g : heawood_graph()$
 
894
(%i3) girth(g);
 
895
(%o3)                                 6
 
896
@end example
 
897
@end deffn
 
898
 
 
899
@deffn {Funci@'on} hamilton_cycle (@var{gr})
 
900
Devuelve el ciclo de Hamilton del grafo @var{gr} o una lista vac@'{@dotless{i}}a
 
901
si @var{gr} no es hamiltoniano.
 
902
 
 
903
Ejemplo:
 
904
 
 
905
@c ===beg===
 
906
@c load (graphs)$
 
907
@c c : cube_graph(3)$
 
908
@c hc : hamilton_cycle(c);
 
909
@c draw_graph(c, show_edges=vertices_to_cycle(hc))$
 
910
@c ===end===
 
911
@example
 
912
(%i1) load (graphs)$
 
913
(%i2) c : cube_graph(3)$
 
914
(%i3) hc : hamilton_cycle(c);
 
915
(%o3)              [7, 3, 2, 6, 4, 0, 1, 5, 7]
 
916
(%i4) draw_graph(c, show_edges=vertices_to_cycle(hc))$
 
917
@end example
 
918
@end deffn
 
919
 
 
920
@ifhtml
 
921
@image{../figures/graphs03,6cm}
 
922
@end ifhtml
 
923
 
 
924
@deffn {Funci@'on} hamilton_path (@var{gr})
 
925
Devuelve el camino de Hamilton del grafo @var{gr} o una lista vac@'{@dotless{i}}a
 
926
si @var{gr} no los tiene.
 
927
 
 
928
Ejemplo:
 
929
 
 
930
@c ===beg===
 
931
@c load (graphs)$
 
932
@c p : petersen_graph()$
 
933
@c hp : hamilton_path(p);
 
934
@c draw_graph(p, show_edges=vertices_to_path(hp))$
 
935
@c ===end===
 
936
@example
 
937
(%i1) load (graphs)$
 
938
(%i2) p : petersen_graph()$
 
939
(%i3) hp : hamilton_path(p);
 
940
(%o3)                  [0, 5, 7, 2, 1, 6, 8, 3, 4, 9]
 
941
(%i4) draw_graph(p, show_edges=vertices_to_path(hp))$
 
942
@end example
 
943
@end deffn
 
944
 
 
945
@ifhtml
 
946
@image{../figures/graphs04,6cm}
 
947
@end ifhtml
 
948
 
 
949
@deffn {Funci@'on} isomorphism (@var{gr1}, @var{gr2})
 
950
Devuelve un isomorfismo entre los grafos/digrafos @var{gr1} y @var{gr2}.
 
951
Si @var{gr1} y @var{gr2} no son isomorfos, devuelve una lista vac@'{@dotless{i}}a.
 
952
 
 
953
Ejemplo:
 
954
 
 
955
@c ===beg===
 
956
@c load (graphs)$
 
957
@c clk5:complement_graph(line_graph(complete_graph(5)))$
 
958
@c isomorphism(clk5, petersen_graph());
 
959
@c ===end===
 
960
@example
 
961
(%i1) load (graphs)$
 
962
(%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
 
963
(%i3) isomorphism(clk5, petersen_graph());
 
964
(%o3) [9 -> 0, 2 -> 1, 6 -> 2, 5 -> 3, 0 -> 4, 1 -> 5, 3 -> 6, 
 
965
                                          4 -> 7, 7 -> 8, 8 -> 9]
 
966
@end example
 
967
@end deffn
 
968
 
 
969
@deffn {Funci@'on} in_neighbors (@var{v}, @var{gr})
 
970
Devuelve la lista de los nodos hijos del v@'ertice @var{v}
 
971
del grafo orientado @var{gr}.
 
972
 
 
973
Ejemplo:
 
974
 
 
975
@c ===beg===
 
976
@c load (graphs)$
 
977
@c p : path_digraph(3)$
 
978
@c in_neighbors(2, p);
 
979
@c out_neighbors(2, p);
 
980
@c ===end===
 
981
@example
 
982
(%i1) load (graphs)$
 
983
(%i2) p : path_digraph(3)$
 
984
(%i3) in_neighbors(2, p);
 
985
(%o3)                                 [1]
 
986
(%i4) out_neighbors(2, p);
 
987
(%o4)                                 []
 
988
@end example
 
989
@end deffn
 
990
 
 
991
@deffn {Funci@'on} is_biconnected (@var{gr})
 
992
Devuelve @code{true} si @var{gr} est@'a biconectado y @code{false}
 
993
en caso contrario.
 
994
 
 
995
Ejemplo:
 
996
 
 
997
Example:
 
998
@c ===beg===
 
999
@c load (graphs)$
 
1000
@c is_biconnected(cycle_graph(5));
 
1001
@c is_biconnected(path_graph(5));
 
1002
@c ===end===
 
1003
@example
 
1004
(%i1) load (graphs)$
 
1005
(%i2) is_biconnected(cycle_graph(5));
 
1006
(%o2)                         true
 
1007
(%i3) is_biconnected(path_graph(5));
 
1008
(%o3)                         false
 
1009
@end example
 
1010
@end deffn
 
1011
 
 
1012
@deffn {Funci@'on} is_bipartite (@var{gr})
 
1013
Devuelve @code{true} si @var{gr} es bipartido (2-coloreable) y @code{false}
 
1014
en caso contrario.
 
1015
 
 
1016
Ejemplo:
 
1017
 
 
1018
@c ===beg===
 
1019
@c load (graphs)$
 
1020
@c is_bipartite(petersen_graph());
 
1021
@c is_bipartite(heawood_graph());
 
1022
@c ===end===
 
1023
@example
 
1024
(%i1) load (graphs)$
 
1025
(%i2) is_bipartite(petersen_graph());
 
1026
(%o2)                               false
 
1027
(%i3) is_bipartite(heawood_graph());
 
1028
(%o3)                               true
 
1029
@end example
 
1030
@end deffn
 
1031
 
 
1032
@deffn {Funci@'on} is_connected (@var{gr})
 
1033
Devuelve @code{true} si el grafo @var{gr} es conexo y @code{false}
 
1034
en caso contrario.
 
1035
 
 
1036
Ejemplo:
 
1037
 
 
1038
@c ===beg===
 
1039
@c load (graphs)$
 
1040
@c is_connected(graph_union(cycle_graph(4), path_graph(3)));
 
1041
@c ===end===
 
1042
@example
 
1043
(%i1) load (graphs)$
 
1044
(%i2) is_connected(graph_union(cycle_graph(4), path_graph(3)));
 
1045
(%o2)                               false
 
1046
@end example
 
1047
@end deffn
 
1048
 
 
1049
@deffn {Funci@'on} is_digraph (@var{gr})
 
1050
Devuelve @code{true} si @var{gr} es un grafo orientado (digrafo) y
 
1051
@code{false} en caso contrario.
 
1052
 
 
1053
Ejemplo:
 
1054
 
 
1055
@c ===beg===
 
1056
@c load (graphs)$
 
1057
@c is_digraph(path_graph(5));
 
1058
@c is_digraph(path_digraph(5));
 
1059
@c ===end===
 
1060
@example
 
1061
(%i1) load (graphs)$
 
1062
(%i2) is_digraph(path_graph(5));
 
1063
(%o2)                               false
 
1064
(%i3) is_digraph(path_digraph(5));
 
1065
(%o3)                               true
 
1066
@end example
 
1067
@end deffn
 
1068
 
 
1069
@deffn {Funci@'on} is_edge_in_graph (@var{e}, @var{gr})
 
1070
Devuelve @code{true} si @var{e} es una arista (arco) del
 
1071
grafo (digrafo) @var{g} y @code{false} en caso contrario.
 
1072
 
 
1073
Ejemplo:
 
1074
 
 
1075
@c ===beg===
 
1076
@c load (graphs)$
 
1077
@c c4 : cycle_graph(4)$
 
1078
@c is_edge_in_graph([2,3], c4);
 
1079
@c is_edge_in_graph([3,2], c4);
 
1080
@c is_edge_in_graph([2,4], c4);
 
1081
@c is_edge_in_graph([3,2], cycle_digraph(4));
 
1082
@c ===end===
 
1083
@example
 
1084
(%i1) load (graphs)$
 
1085
(%i2) c4 : cycle_graph(4)$
 
1086
(%i3) is_edge_in_graph([2,3], c4);
 
1087
(%o3)                               true
 
1088
(%i4) is_edge_in_graph([3,2], c4);
 
1089
(%o4)                               true
 
1090
(%i5) is_edge_in_graph([2,4], c4);
 
1091
(%o5)                               false
 
1092
(%i6) is_edge_in_graph([3,2], cycle_digraph(4));
 
1093
(%o6)                               false
 
1094
@end example
 
1095
@end deffn
 
1096
 
 
1097
@deffn {Funci@'on} is_graph (@var{gr})
 
1098
Devuelve @code{true} si @var{gr} es un grafo y @code{false} en caso contrario.
 
1099
 
 
1100
Ejemplo:
 
1101
 
 
1102
@c ===beg===
 
1103
@c load (graphs)$
 
1104
@c is_graph(path_graph(5));
 
1105
@c is_graph(path_digraph(5));
 
1106
@c ===end===
 
1107
@example
 
1108
(%i1) load (graphs)$
 
1109
(%i2) is_graph(path_graph(5));
 
1110
(%o2)                               true
 
1111
(%i3) is_graph(path_digraph(5));
 
1112
(%o3)                               false
 
1113
@end example
 
1114
@end deffn
 
1115
 
 
1116
@deffn {Funci@'on} is_graph_or_digraph (@var{gr})
 
1117
Devuelve @code{true} si @var{gr} es una grafo, orientado o no,
 
1118
y @code{false} en caso contrario.
 
1119
 
 
1120
Ejemplo:
 
1121
 
 
1122
@c ===beg===
 
1123
@c load (graphs)$
 
1124
@c is_graph_or_digraph(path_graph(5));
 
1125
@c is_graph_or_digraph(path_digraph(5));
 
1126
@c ===end===
 
1127
@example
 
1128
(%i1) load (graphs)$
 
1129
(%i2) is_graph_or_digraph(path_graph(5));
 
1130
(%o2)                               true
 
1131
(%i3) is_graph_or_digraph(path_digraph(5));
 
1132
(%o3)                               true
 
1133
@end example
 
1134
@end deffn
 
1135
 
 
1136
@deffn {Funci@'on} is_isomorphic (@var{gr1}, @var{gr2})
 
1137
Devuelve @code{true} si los grafos/digrafos @var{gr1} y @var{gr2} son
 
1138
isomorfos y @code{false} en caso contrario.
 
1139
 
 
1140
V@'ease tambi@'en @code{isomorphism}.
 
1141
 
 
1142
Ejemplo:
 
1143
 
 
1144
@c ===beg===
 
1145
@c load (graphs)$
 
1146
@c clk5:complement_graph(line_graph(complete_graph(5)))$
 
1147
@c is_isomorphic(clk5, petersen_graph());
 
1148
@c ===end===
 
1149
@example
 
1150
(%i1) load (graphs)$
 
1151
(%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
 
1152
(%i3) is_isomorphic(clk5, petersen_graph());
 
1153
(%o3)                         true
 
1154
@end example
 
1155
@end deffn
 
1156
 
 
1157
@deffn {Funci@'on} is_planar (@var{gr})
 
1158
Devuelve @code{true} si @var{gr} es un grafo planar y @code{false} en caso contrario.
 
1159
 
 
1160
El algoritmo utilizado es el de Demoucron, que es de tiempo cuadr@'atico.
 
1161
 
 
1162
Ejemplo:
 
1163
 
 
1164
@c ===beg===
 
1165
@c load (graphs)$
 
1166
@c is_planar(dodecahedron_graph());
 
1167
@c is_planar(petersen_graph());
 
1168
@c is_planar(petersen_graph(10,2));
 
1169
@c ===end===
 
1170
@example
 
1171
(%i1) load (graphs)$
 
1172
(%i2) is_planar(dodecahedron_graph());
 
1173
(%o2)                                true
 
1174
(%i3) is_planar(petersen_graph());
 
1175
(%o3)                                false
 
1176
(%i4) is_planar(petersen_graph(10,2));
 
1177
(%o4)                                true
 
1178
@end example
 
1179
@end deffn
 
1180
 
 
1181
@deffn {Funci@'on} is_sconnected (@var{gr})
 
1182
Devuelve @code{true} si el grafo orientado @var{gr} es fuertemente conexo,
 
1183
devolviendo @code{false} en caso contrario.
 
1184
 
 
1185
Ejemplo:
 
1186
 
 
1187
@c ===beg===
 
1188
@c load (graphs)$
 
1189
@c is_sconnected(cycle_digraph(5));
 
1190
@c is_sconnected(path_digraph(5));
 
1191
@c ===end===
 
1192
@example
 
1193
(%i1) load (graphs)$
 
1194
(%i2) is_sconnected(cycle_digraph(5));
 
1195
(%o2)                               true
 
1196
(%i3) is_sconnected(path_digraph(5));
 
1197
(%o3)                               false
 
1198
@end example
 
1199
@end deffn
 
1200
 
 
1201
@deffn {Funci@'on} is_vertex_in_graph (@var{v}, @var{gr})
 
1202
Devuelve @code{true} si @var{v} es un v@'ertice del grafo @var{g}
 
1203
y @code{false} en caso contrario.
 
1204
 
 
1205
Ejemplo:
 
1206
 
 
1207
@c ===beg===
 
1208
@c load (graphs)$
 
1209
@c c4 : cycle_graph(4)$
 
1210
@c is_vertex_in_graph(0, c4);
 
1211
@c is_vertex_in_graph(6, c4);
 
1212
@c ===end===
 
1213
@example
 
1214
(%i1) load (graphs)$
 
1215
(%i2) c4 : cycle_graph(4)$
 
1216
(%i3) is_vertex_in_graph(0, c4);
 
1217
(%o3)                               true
 
1218
(%i4) is_vertex_in_graph(6, c4);
 
1219
(%o4)                               false
 
1220
@end example
 
1221
@end deffn
 
1222
 
 
1223
@deffn {Funci@'on} is_tree (@var{gr})
 
1224
Devuelve @code{true} si @var{gr} es un @'arbol y @code{false} en caso contrario.
 
1225
 
 
1226
Ejemplo:
 
1227
 
 
1228
@c ===beg===
 
1229
@c load (graphs)$
 
1230
@c is_tree(random_tree(4));
 
1231
@c is_tree(graph_union(random_tree(4), random_tree(5)));
 
1232
@c ===end===
 
1233
@example
 
1234
(%i1) load (graphs)$
 
1235
(%i2) is_tree(random_tree(4));
 
1236
(%o2)                               true
 
1237
(%i3) is_tree(graph_union(random_tree(4), random_tree(5)));
 
1238
(%o3)                               false
 
1239
@end example
 
1240
@end deffn
 
1241
 
 
1242
@deffn {Funci@'on} laplacian_matrix (@var{gr})
 
1243
Devuelve el laplaciano de la matriz del grafo @var{gr}.
 
1244
 
 
1245
Ejemplo:
 
1246
 
 
1247
@c ===beg===
 
1248
@c load (graphs)$
 
1249
@c laplacian_matrix(cycle_graph(5));
 
1250
@c ===end===
 
1251
@example
 
1252
(%i1) load (graphs)$
 
1253
(%i2) laplacian_matrix(cycle_graph(5));
 
1254
                          [  2   - 1   0    0   - 1 ]
 
1255
                          [                         ]
 
1256
                          [ - 1   2   - 1   0    0  ]
 
1257
                          [                         ]
 
1258
(%o2)                     [  0   - 1   2   - 1   0  ]
 
1259
                          [                         ]
 
1260
                          [  0    0   - 1   2   - 1 ]
 
1261
                          [                         ]
 
1262
                          [ - 1   0    0   - 1   2  ]
 
1263
@end example
 
1264
@end deffn
 
1265
 
 
1266
@deffn {Funci@'on} max_clique (@var{gr})
 
1267
Devuelve el clique m@'aximo del grafo @var{gr}.
 
1268
 
 
1269
Ejemplo:
 
1270
 
 
1271
@c ===beg===
 
1272
@c load (graphs)$
 
1273
@c g : random_graph(100, 0.5)$
 
1274
@c max_clique(g);
 
1275
@c ===end===
 
1276
@example
 
1277
(%i1) load (graphs)$
 
1278
(%i2) g : random_graph(100, 0.5)$
 
1279
(%i3) max_clique(g);
 
1280
(%o3)       [6, 12, 31, 36, 52, 59, 62, 63, 80]
 
1281
@end example
 
1282
@end deffn
 
1283
 
 
1284
@deffn {Funci@'on} max_degree (@var{gr})
 
1285
Devuelve el grado m@'aximo de los v@'ertices del grafo @var{gr} y un 
 
1286
v@'ertice de grado m@'aximo.
 
1287
 
 
1288
Ejemplo:
 
1289
 
 
1290
@c ===beg===
 
1291
@c load (graphs)$
 
1292
@c g : random_graph(100, 0.02)$
 
1293
@c max_degree(g);
 
1294
@c vertex_degree(95, g);
 
1295
@c ===end===
 
1296
@example
 
1297
(%i1) load (graphs)$
 
1298
(%i2) g : random_graph(100, 0.02)$
 
1299
(%i3) max_degree(g);
 
1300
(%o3)                        [6, 79]
 
1301
(%i4) vertex_degree(95, g);
 
1302
(%o4)                           3
 
1303
@end example
 
1304
@end deffn
 
1305
 
 
1306
@deffn {Funci@'on} max_flow (@var{net}, @var{s}, @var{t})
 
1307
Devuelve el flujo maximal de la red @var{net} con origen en
 
1308
@var{s} y final en @var{t}.
 
1309
 
 
1310
La funci@'on devuelve el valor del flujo maximal y una lista con los
 
1311
pesos de los arcos del flujo @'optimo.
 
1312
 
 
1313
Ejemplo:
 
1314
 
 
1315
Example:
 
1316
@c ===beg===
 
1317
@c load (graphs)$
 
1318
@c net : create_graph(
 
1319
@c   [1,2,3,4,5,6],
 
1320
@c   [[[1,2], 1.0],
 
1321
@c    [[1,3], 0.3],
 
1322
@c    [[2,4], 0.2],
 
1323
@c    [[2,5], 0.3],
 
1324
@c    [[3,4], 0.1],
 
1325
@c    [[3,5], 0.1],
 
1326
@c    [[4,6], 1.0],
 
1327
@c    [[5,6], 1.0]],
 
1328
@c   directed=true)$
 
1329
@c [flow_value, flow] : max_flow(net, 1, 6);
 
1330
@c fl : 0$
 
1331
@c for u in out_neighbors(1, net) 
 
1332
@c      do fl : fl + assoc([1, u], flow)$
 
1333
@c fl;
 
1334
@c ===end===
 
1335
@example
 
1336
(%i1) load (graphs)$
 
1337
(%i2) net : create_graph(
 
1338
  [1,2,3,4,5,6],
 
1339
  [[[1,2], 1.0],
 
1340
   [[1,3], 0.3],
 
1341
   [[2,4], 0.2],
 
1342
   [[2,5], 0.3],
 
1343
   [[3,4], 0.1],
 
1344
   [[3,5], 0.1],
 
1345
   [[4,6], 1.0],
 
1346
   [[5,6], 1.0]],
 
1347
  directed=true)$
 
1348
(%i3) [flow_value, flow] : max_flow(net, 1, 6);
 
1349
(%o3) [0.7, [[[1, 2], 0.5], [[1, 3], 0.2], [[2, 4], 0.2],
 
1350
[[2, 5], 0.3], [[3, 4], 0.1], [[3, 5], 0.1], [[4, 6], 0.3],
 
1351
[[5, 6], 0.4]]]
 
1352
(%i4) fl : 0$
 
1353
(%i5) for u in out_neighbors(1, net) 
 
1354
         do fl : fl + assoc([1, u], flow)$
 
1355
(%i6) fl;
 
1356
(%o6)                                 0.7
 
1357
@end example
 
1358
@end deffn
 
1359
 
 
1360
@deffn {Funci@'on} max_independent_set (@var{gr})
 
1361
Devuelve un conjunto maximal independiente de v@'ertices del grafo @var{gr}.
 
1362
 
 
1363
Ejemplo:
 
1364
 
 
1365
@c ===beg===
 
1366
@c load (graphs)$
 
1367
@c d : dodecahedron_graph()$
 
1368
@c mi : max_independent_set(d);
 
1369
@c draw_graph(d, show_vertices=mi)$
 
1370
@c ===end===
 
1371
@example
 
1372
(%i1) load (graphs)$
 
1373
(%i2) d : dodecahedron_graph()$
 
1374
(%i3) mi : max_independent_set(d);
 
1375
(%o3)             [0, 3, 5, 9, 10, 11, 18, 19]
 
1376
(%i4) draw_graph(d, show_vertices=mi)$
 
1377
@end example
 
1378
@end deffn
 
1379
 
 
1380
@ifhtml
 
1381
@image{../figures/graphs05,6cm}
 
1382
@end ifhtml
 
1383
 
 
1384
@deffn {Funci@'on} max_matching (@var{gr})
 
1385
Devuelve un conjunto maximal independiente de aristas del grafo @var{gr}.
 
1386
 
 
1387
Ejemplo:
 
1388
 
 
1389
@c ===beg===
 
1390
@c load (graphs)$
 
1391
@c d : dodecahedron_graph()$
 
1392
@c m : max_matching(d);
 
1393
@c draw_graph(d, show_edges=m)$
 
1394
@c ===end===
 
1395
@example
 
1396
(%i1) load (graphs)$
 
1397
(%i2) d : dodecahedron_graph()$
 
1398
(%i3) m : max_matching(d);
 
1399
(%o3) [[5, 7], [8, 9], [6, 10], [14, 19], [13, 18], [12, 17], 
 
1400
                               [11, 16], [0, 15], [3, 4], [1, 2]]
 
1401
(%i4) draw_graph(d, show_edges=m)$
 
1402
@end example
 
1403
@end deffn
 
1404
 
 
1405
@ifhtml
 
1406
@image{../figures/graphs06,6cm}
 
1407
@end ifhtml
 
1408
 
 
1409
@deffn {Funci@'on} min_degree (@var{gr})
 
1410
Devuelve el grado m@'{@dotless{i}}nimo de los v@'ertices del grafo @var{gr} y un 
 
1411
v@'ertice de grado m@'{@dotless{i}}nimo.
 
1412
 
 
1413
Ejemplo:
 
1414
 
 
1415
@c ===beg===
 
1416
@c load (graphs)$
 
1417
@c g : random_graph(100, 0.1)$
 
1418
@c min_degree(g);
 
1419
@c vertex_degree(21, g);
 
1420
@c ===end===
 
1421
@example
 
1422
(%i1) load (graphs)$
 
1423
(%i2) g : random_graph(100, 0.1)$
 
1424
(%i3) min_degree(g);
 
1425
(%o3)                              [3, 49]
 
1426
(%i4) vertex_degree(21, g);
 
1427
(%o4)                                 9
 
1428
@end example
 
1429
@end deffn
 
1430
 
 
1431
@deffn {Funci@'on} min_edge_cut (@var{gr})
 
1432
Devuelve el m@'{@dotless{i}}nimo @i{edge cut} del grafo @var{gr}. Un @i{edge cut} es
 
1433
un conjunto de aristas cuya eliminaci@'on aumenta el n@'umero de componentes del grafo.
 
1434
 
 
1435
V@'ease tambi@'en @code{edge_connectivity}.
 
1436
@end deffn
 
1437
 
 
1438
@deffn {Funci@'on} min_vertex_cover (@var{gr})
 
1439
Devuelve el m@'{@dotless{i}}nimo nodo @i{covering} del grafo @var{gr}.
 
1440
@c Esta traduccion esta tomada de la wikipedia. Habra que revisarla.
 
1441
@end deffn
 
1442
 
 
1443
@deffn {Funci@'on} min_vertex_cut (@var{gr})
 
1444
Devuelve el m@'{@dotless{i}}nimo @i{vertex cut} del grafo @var{gr}.
 
1445
 
 
1446
V@'ease tambi@'en @code{vertex_connectivity}.
 
1447
@end deffn
 
1448
 
 
1449
 
 
1450
@deffn {Funci@'on} minimum_spanning_tree (@var{gr})
 
1451
Devuelve el grafo de expansi@'on m@'{@dotless{i}}nimo del grafo @var{gr}.
 
1452
 
 
1453
Ejemplo:
 
1454
 
 
1455
@c ===beg===
 
1456
@c load (graphs)$
 
1457
@c g : graph_product(path_graph(10), path_graph(10))$
 
1458
@c t : minimum_spanning_tree(g)$
 
1459
@c draw_graph(g, show_edges=edges(t))$
 
1460
@c ===end===
 
1461
@example
 
1462
(%i1) load (graphs)$
 
1463
(%i2) g : graph_product(path_graph(10), path_graph(10))$
 
1464
(%i3) t : minimum_spanning_tree(g)$
 
1465
(%i4) draw_graph(g, show_edges=edges(t))$
 
1466
@end example
 
1467
@end deffn
 
1468
 
 
1469
@ifhtml
 
1470
@image{../figures/graphs07,6cm}
 
1471
@end ifhtml
 
1472
 
 
1473
@deffn {Funci@'on} neighbors (@var{v}, @var{gr})
 
1474
Devuelve la lista de los vecinos del v@'ertice @var{v} del grafo @var{gr}.
 
1475
 
 
1476
Ejemplo:
 
1477
 
 
1478
@c ===beg===
 
1479
@c load (graphs)$
 
1480
@c p : petersen_graph()$
 
1481
@c neighbors(3, p);
 
1482
@c ===end===
 
1483
@example
 
1484
(%i1) load (graphs)$
 
1485
(%i2) p : petersen_graph()$
 
1486
(%i3) neighbors(3, p);
 
1487
(%o3)                             [4, 8, 2]
 
1488
@end example
 
1489
@end deffn
 
1490
 
 
1491
@deffn {Funci@'on} odd_girth (@var{gr})
 
1492
Devuelve la longitud del ciclo impar m@'as corto del grafo @var{gr}.
 
1493
 
 
1494
Ejemplo:
 
1495
 
 
1496
@c ===beg===
 
1497
@c load (graphs)$
 
1498
@c g : graph_product(cycle_graph(4), cycle_graph(7))$
 
1499
@c girth(g);
 
1500
@c odd_girth(g);
 
1501
@c ===end===
 
1502
@example
 
1503
(%i1) load (graphs)$
 
1504
(%i2) g : graph_product(cycle_graph(4), cycle_graph(7))$
 
1505
(%i3) girth(g);
 
1506
(%o3)                                 4
 
1507
(%i4) odd_girth(g);
 
1508
(%o4)                                 7
 
1509
@end example
 
1510
@end deffn
 
1511
 
 
1512
@deffn {Funci@'on} out_neighbors (@var{v}, @var{gr})
 
1513
Devuelve la lista de los nodos padres del v@'ertice @var{v} del grafo
 
1514
orientado @var{gr}.
 
1515
 
 
1516
Ejemplo:
 
1517
 
 
1518
@c ===beg===
 
1519
@c load (graphs)$
 
1520
@c p : path_digraph(3)$
 
1521
@c in_neighbors(2, p);
 
1522
@c out_neighbors(2, p);
 
1523
@c ===end===
 
1524
@example
 
1525
(%i1) load (graphs)$
 
1526
(%i2) p : path_digraph(3)$
 
1527
(%i3) in_neighbors(2, p);
 
1528
(%o3)                                 [1]
 
1529
(%i4) out_neighbors(2, p);
 
1530
(%o4)                                 []
 
1531
@end example
 
1532
@end deffn
 
1533
 
 
1534
@deffn {Funci@'on} planar_embedding (@var{gr})
 
1535
Devuelve la lista de caminos faciales en una proyecci@'on planar de @var{gr},
 
1536
o @code{false} si @var{gr} no es un grafo planar.
 
1537
 
 
1538
El grafo @var{gr} debe estar biconectado.
 
1539
 
 
1540
El algoritmo utilizado es el de Demoucron, que es de tiempo cuadr@'atico.
 
1541
 
 
1542
Ejemplo:
 
1543
 
 
1544
@c ===beg===
 
1545
@c load (graphs)$
 
1546
@c planar_embedding(grid_graph(3,3));
 
1547
@c ===end===
 
1548
@example
 
1549
(%i1) load (graphs)$
 
1550
(%i2) planar_embedding(grid_graph(3,3));
 
1551
(%o2) [[3, 6, 7, 8, 5, 2, 1, 0], [4, 3, 0, 1], [3, 4, 7, 6], 
 
1552
                                      [8, 7, 4, 5], [1, 2, 5, 4]]
 
1553
@end example
 
1554
@end deffn
 
1555
 
 
1556
@deffn {Funci@'on} print_graph (@var{gr})
 
1557
Muestra alguna informaci@'on sobre el grafo @var{gr}.
 
1558
 
 
1559
Ejemplo:
 
1560
 
 
1561
@c ===beg===
 
1562
@c load (graphs)$
 
1563
@c c5 : cycle_graph(5)$
 
1564
@c print_graph(c5)$
 
1565
@c dc5 : cycle_digraph(5)$
 
1566
@c print_graph(dc5)$
 
1567
@c out_neighbors(0, dc5);
 
1568
@c ===end===
 
1569
@example
 
1570
(%i1) load (graphs)$
 
1571
(%i2) c5 : cycle_graph(5)$
 
1572
(%i3) print_graph(c5)$
 
1573
Graph on 5 vertices with 5 edges.
 
1574
Adjacencies:
 
1575
  4 :  0  3
 
1576
  3 :  4  2
 
1577
  2 :  3  1
 
1578
  1 :  2  0
 
1579
  0 :  4  1
 
1580
(%i4) dc5 : cycle_digraph(5)$
 
1581
(%i5) print_graph(dc5)$
 
1582
Digraph on 5 vertices with 5 arcs.
 
1583
Adjacencies:
 
1584
  4 :  0
 
1585
  3 :  4
 
1586
  2 :  3
 
1587
  1 :  2
 
1588
  0 :  1
 
1589
(%i6) out_neighbors(0, dc5);
 
1590
(%o6)                                [1]
 
1591
@end example
 
1592
@end deffn
 
1593
 
 
1594
@deffn {Funci@'on} radius (@var{gr})
 
1595
Devuelve el radio del grafo  @var{gr}.
 
1596
 
 
1597
Ejemplo:
 
1598
 
 
1599
@c ===beg===
 
1600
@c load (graphs)$
 
1601
@c radius(dodecahedron_graph());
 
1602
@c ===end===
 
1603
@example
 
1604
(%i1) load (graphs)$
 
1605
(%i2) radius(dodecahedron_graph());
 
1606
(%o2)                                 5
 
1607
@end example
 
1608
@end deffn
 
1609
 
 
1610
@deffn {Funci@'on} set_edge_weight (@var{e}, @var{w}, @var{gr})
 
1611
Asigna el peso @var{w} a la arista @var{e} del grafo @var{gr}.
 
1612
 
 
1613
Ejemplo:
 
1614
 
 
1615
@c ===beg===
 
1616
@c load (graphs)$
 
1617
@c g : create_graph([1, 2], [[[1,2], 1.2]])$
 
1618
@c get_edge_weight([1,2], g);
 
1619
@c set_edge_weight([1,2], 2.1, g);
 
1620
@c get_edge_weight([1,2], g);
 
1621
@c ===end===
 
1622
@example
 
1623
(%i1) load (graphs)$
 
1624
(%i2) g : create_graph([1, 2], [[[1,2], 1.2]])$
 
1625
(%i3) get_edge_weight([1,2], g);
 
1626
(%o3)                                1.2
 
1627
(%i4) set_edge_weight([1,2], 2.1, g);
 
1628
(%o4)                               done
 
1629
(%i5) get_edge_weight([1,2], g);
 
1630
(%o5)                                2.1
 
1631
@end example
 
1632
@end deffn
 
1633
 
 
1634
@deffn {Funci@'on} set_vertex_label (@var{v}, @var{l}, @var{gr})
 
1635
Asigna la etiqueta @var{l} al v@'ertice @var{v} del grafo @var{gr}.
 
1636
 
 
1637
Ejemplo:
 
1638
 
 
1639
@c ===beg===
 
1640
@c load (graphs)$
 
1641
@c g : create_graph([[1, "One"], [2, "Two"]], [[1,2]])$
 
1642
@c get_vertex_label(1, g);
 
1643
@c set_vertex_label(1, "oNE", g);
 
1644
@c get_vertex_label(1, g);
 
1645
@c ===end===
 
1646
@example
 
1647
(%i1) load (graphs)$
 
1648
(%i2) g : create_graph([[1, "One"], [2, "Two"]], [[1,2]])$
 
1649
(%i3) get_vertex_label(1, g);
 
1650
(%o3)                                One
 
1651
(%i4) set_vertex_label(1, "oNE", g);
 
1652
(%o4)                               done
 
1653
(%i5) get_vertex_label(1, g);
 
1654
(%o5)                                oNE
 
1655
@end example
 
1656
@end deffn
 
1657
 
 
1658
@deffn {Funci@'on} shortest_path (@var{u}, @var{v}, @var{gr})
 
1659
Devuelve el camino m@'as corto desde @var{u} hasta @var{v} del grafo @var{gr}.
 
1660
 
 
1661
Ejemplo:
 
1662
 
 
1663
@c ===beg===
 
1664
@c load (graphs)$
 
1665
@c d : dodecahedron_graph()$
 
1666
@c path : shortest_path(0, 7, d);
 
1667
@c draw_graph(d, show_edges=vertices_to_path(path))$
 
1668
@c ===end===
 
1669
@example
 
1670
(%i1) load (graphs)$
 
1671
(%i2) d : dodecahedron_graph()$
 
1672
(%i3) path : shortest_path(0, 7, d);
 
1673
(%o3)                          [0, 1, 19, 13, 7]
 
1674
(%i4) draw_graph(d, show_edges=vertices_to_path(path))$
 
1675
@end example
 
1676
@end deffn
 
1677
 
 
1678
@ifhtml
 
1679
@image{../figures/graphs08,6cm}
 
1680
@end ifhtml
 
1681
 
 
1682
 
 
1683
@deffn {Funci@'on} shortest_weighted_path (@var{u}, @var{v}, @var{gr})
 
1684
Devuelve la longitud del camino m@'as corto ponderado y el propio camino
 
1685
m@'as corto ponderado desde @var{u} hasta @var{v} en el grafo @var{gr}.
 
1686
 
 
1687
La longitud del camino ponderado es la suma de los pesos de las aristas
 
1688
del camino. Si una arista no tiene peso asignado, su valor por defecto
 
1689
es la unidad.
 
1690
 
 
1691
Ejemplo:
 
1692
 
 
1693
@c ===beg===
 
1694
@c load (graphs)$
 
1695
@c g: petersen_graph(20, 2)$
 
1696
@c for e in edges(g) do set_edge_weight(e, random(1.0), g)$
 
1697
@c shortest_weighted_path(0, 10, g);
 
1698
@c ===end===
 
1699
@example
 
1700
(%i1) load (graphs)$
 
1701
(%i2) g: petersen_graph(20, 2)$
 
1702
(%i3) for e in edges(g) do set_edge_weight(e, random(1.0), g)$
 
1703
(%i4) shortest_weighted_path(0, 10, g);
 
1704
(%o4) [2.575143920268482, [0, 20, 38, 36, 34, 32, 30, 10]]
 
1705
@end example
 
1706
 
 
1707
@end deffn
 
1708
 
 
1709
 
 
1710
@deffn {Funci@'on} strong_components (@var{gr})
 
1711
Devuelve las componentes fuertes del grafo orientado @var{gr}.
 
1712
 
 
1713
Ejemplo:
 
1714
 
 
1715
@c ===beg===
 
1716
@c load (graphs)$
 
1717
@c t : random_tournament(4)$
 
1718
@c strong_components(t);
 
1719
@c vertex_out_degree(3, t);
 
1720
@c ===end===
 
1721
@example
 
1722
(%i1) load (graphs)$
 
1723
(%i2) t : random_tournament(4)$
 
1724
(%i3) strong_components(t);
 
1725
(%o3)                         [[1], [0], [2], [3]]
 
1726
(%i4) vertex_out_degree(3, t);
 
1727
(%o4)                                 3
 
1728
@end example
 
1729
@end deffn
 
1730
 
 
1731
@deffn {Funci@'on} topological_sort (@var{dag})
 
1732
Devuelve el orden topol@'ogico de los v@'ertices del grafo orientado @var{dag}
 
1733
o una lista vac@'{@dotless{i}}a si @var{dag} no es un grafo orientado
 
1734
ac@'{@dotless{i}}clico.
 
1735
 
 
1736
Ejemplo:
 
1737
 
 
1738
@c ===beg===
 
1739
@c load (graphs)$
 
1740
@c g:create_graph(
 
1741
@c          [1,2,3,4,5],
 
1742
@c          [
 
1743
@c           [1,2], [2,5], [5,3],
 
1744
@c           [5,4], [3,4], [1,3]
 
1745
@c          ],
 
1746
@c          directed=true)$
 
1747
@c topological_sort(g);
 
1748
@c ===end===
 
1749
@example
 
1750
(%i1) load (graphs)$
 
1751
(%i2) g:create_graph(
 
1752
         [1,2,3,4,5],
 
1753
         [
 
1754
          [1,2], [2,5], [5,3],
 
1755
          [5,4], [3,4], [1,3]
 
1756
         ],
 
1757
         directed=true)$
 
1758
(%i3) topological_sort(g);
 
1759
(%o3)                           [1, 2, 5, 3, 4]
 
1760
@end example
 
1761
@end deffn
 
1762
 
 
1763
@deffn {Funci@'on} vertex_connectivity (@var{g})
 
1764
Devuelve la conectividad de los v@'ertices del grafo @var{g}.
 
1765
 
 
1766
V@'ease tambi@'en @code{min_vertex_cut}.
 
1767
@end deffn
 
1768
 
 
1769
@deffn {Funci@'on} vertex_degree (@var{v}, @var{gr})
 
1770
Devuelve el grado del v@'ertice @var{v} del grafo @var{gr}.
 
1771
@end deffn
 
1772
 
 
1773
@deffn {Funci@'on} vertex_distance (@var{u}, @var{v}, @var{gr})
 
1774
Devuelve la longitud del camino m@'as corto entre @var{u} y @var{v}
 
1775
del grafo o digrafo @var{gr}.
 
1776
 
 
1777
Ejemplo:
 
1778
 
 
1779
@c ===beg===
 
1780
@c load (graphs)$
 
1781
@c d : dodecahedron_graph()$
 
1782
@c vertex_distance(0, 7, d);
 
1783
@c shortest_path(0, 7, d);
 
1784
@c ===end===
 
1785
@example
 
1786
(%i1) load (graphs)$
 
1787
(%i2) d : dodecahedron_graph()$
 
1788
(%i3) vertex_distance(0, 7, d);
 
1789
(%o3)                                 4
 
1790
(%i4) shortest_path(0, 7, d);
 
1791
(%o4)                         [0, 1, 19, 13, 7]
 
1792
@end example
 
1793
@end deffn
 
1794
 
 
1795
@deffn {Funci@'on} vertex_eccentricity (@var{v}, @var{gr})
 
1796
Devuelve la excentricidad del v@'ertice @var{v} del grafo @var{gr}.
 
1797
 
 
1798
Ejemplo:
 
1799
 
 
1800
@c ===beg===
 
1801
@c load (graphs)$
 
1802
@c g:cycle_graph(7)$
 
1803
@c vertex_eccentricity(0, g);
 
1804
@c ===end===
 
1805
@example
 
1806
(%i1) load (graphs)$
 
1807
(%i2) g:cycle_graph(7)$
 
1808
(%i3) vertex_eccentricity(0, g);
 
1809
(%o3)                           3
 
1810
@end example
 
1811
@end deffn
 
1812
 
 
1813
@deffn {Funci@'on} vertex_in_degree (@var{v}, @var{gr})
 
1814
Devuelve el grado de entrada del v@'ertice @var{v} del grafo 
 
1815
orientado @var{gr}.
 
1816
 
 
1817
Ejemplo:
 
1818
 
 
1819
@c ===beg===
 
1820
@c load (graphs)$
 
1821
@c p5 : path_digraph(5)$
 
1822
@c print_graph(p5)$
 
1823
@c vertex_in_degree(4, p5);
 
1824
@c in_neighbors(4, p5);
 
1825
@c ===end===
 
1826
@example
 
1827
(%i1) load (graphs)$
 
1828
(%i2) p5 : path_digraph(5)$
 
1829
(%i3) print_graph(p5)$
 
1830
Digraph on 5 vertices with 4 arcs.
 
1831
Adjacencies:
 
1832
  4 :
 
1833
  3 :  4
 
1834
  2 :  3
 
1835
  1 :  2
 
1836
  0 :  1
 
1837
(%i4) vertex_in_degree(4, p5);
 
1838
(%o4)                                 1
 
1839
(%i5) in_neighbors(4, p5);
 
1840
(%o5)                                [3]
 
1841
@end example
 
1842
@end deffn
 
1843
 
 
1844
@deffn {Funci@'on} vertex_out_degree (@var{v}, @var{gr})
 
1845
Devuelve el grado de salida del v@'ertice @var{v} del grafo
 
1846
orientado @var{gr}.
 
1847
 
 
1848
Ejemplo:
 
1849
 
 
1850
@c ===beg===
 
1851
@c load (graphs)$
 
1852
@c t : random_tournament(10)$
 
1853
@c vertex_out_degree(0, t);
 
1854
@c out_neighbors(0, t);
 
1855
@c ===end===
 
1856
@example
 
1857
(%i1) load (graphs)$
 
1858
(%i2) t : random_tournament(10)$
 
1859
(%i3) vertex_out_degree(0, t);
 
1860
(%o3)                           2
 
1861
(%i4) out_neighbors(0, t);
 
1862
(%o4)                        [7, 1]
 
1863
@end example
 
1864
@end deffn
 
1865
 
 
1866
@deffn {Funci@'on} vertices (@var{gr})
 
1867
Devuelve la lista de v@'ertices del grafo @var{gr}.
 
1868
 
 
1869
Example
 
1870
 
 
1871
@c ===beg===
 
1872
@c load (graphs)$
 
1873
@c vertices(complete_graph(4));
 
1874
@c ===end===
 
1875
@example
 
1876
(%i1) load (graphs)$
 
1877
(%i2) vertices(complete_graph(4));
 
1878
(%o2)                           [3, 2, 1, 0]
 
1879
@end example
 
1880
@end deffn
 
1881
 
 
1882
@subsection Modificaci@'on de grafos
 
1883
 
 
1884
 
 
1885
@deffn {Funci@'on} add_edge (@var{e}, @var{gr})
 
1886
A@~nade la arista @var{e} al grafo @var{gr}.
 
1887
 
 
1888
Ejemplo:
 
1889
 
 
1890
@c ===beg===
 
1891
@c load (graphs)$
 
1892
@c p : path_graph(4)$
 
1893
@c neighbors(0, p);
 
1894
@c add_edge([0,3], p);
 
1895
@c neighbors(0, p);
 
1896
@c ===end===
 
1897
@example
 
1898
(%i1) load (graphs)$
 
1899
(%i2) p : path_graph(4)$
 
1900
(%i3) neighbors(0, p);
 
1901
(%o3)                                [1]
 
1902
(%i4) add_edge([0,3], p);
 
1903
(%o4)                               done
 
1904
(%i5) neighbors(0, p);
 
1905
(%o5)                              [3, 1]
 
1906
@end example
 
1907
@end deffn
 
1908
 
 
1909
@deffn {Funci@'on} add_edges (@var{e_list}, @var{gr})
 
1910
A@~nade las aristas de la lista  @var{e_list} al grafo @var{gr}.
 
1911
 
 
1912
Ejemplo:
 
1913
 
 
1914
@c ===beg===
 
1915
@c load (graphs)$
 
1916
@c g : empty_graph(3)$
 
1917
@c add_edges([[0,1],[1,2]], g)$
 
1918
@c print_graph(g)$
 
1919
@c ===end===
 
1920
@example
 
1921
(%i1) load (graphs)$
 
1922
(%i2) g : empty_graph(3)$
 
1923
(%i3) add_edges([[0,1],[1,2]], g)$
 
1924
(%i4) print_graph(g)$
 
1925
Graph on 3 vertices with 2 edges.
 
1926
Adjacencies:
 
1927
  2 :  1
 
1928
  1 :  2  0
 
1929
  0 :  1
 
1930
@end example
 
1931
@end deffn
 
1932
 
 
1933
@deffn {Funci@'on} add_vertex (@var{v}, @var{gr})
 
1934
A@~nade el v@'ertice @var{v} al grafo @var{gr}.
 
1935
 
 
1936
Ejemplo:
 
1937
 
 
1938
@c ===beg===
 
1939
@c load (graphs)$
 
1940
@c g : path_graph(2)$
 
1941
@c add_vertex(2, g)$
 
1942
@c print_graph(g)$
 
1943
@c ===end===
 
1944
@example
 
1945
(%i1) load (graphs)$
 
1946
(%i2) g : path_graph(2)$
 
1947
(%i3) add_vertex(2, g)$
 
1948
(%i4) print_graph(g)$
 
1949
Graph on 3 vertices with 1 edges.
 
1950
Adjacencies:
 
1951
  2 :
 
1952
  1 :  0
 
1953
  0 :  1
 
1954
@end example
 
1955
@end deffn
 
1956
 
 
1957
@deffn {Funci@'on} add_vertices (@var{v_list}, @var{gr})
 
1958
A@~nade los v@'ertices de la lista  @var{v_list} al grafo @var{gr}.
 
1959
@end deffn
 
1960
 
 
1961
@deffn {Funci@'on} connect_vertices (@var{v_list}, @var{u_list}, @var{gr})
 
1962
Conecta todos los v@'ertices de la lista @var{v_list} con los v@'ertices
 
1963
de la lista @var{u_list} del grafo @var{gr}.
 
1964
 
 
1965
@var{v_list} y @var{u_list} pueden ser v@'ertices aislados o una lista de
 
1966
v@'ertices.
 
1967
 
 
1968
Ejemplo:
 
1969
 
 
1970
@c ===beg===
 
1971
@c load (graphs)$
 
1972
@c g : empty_graph(4)$
 
1973
@c connect_vertices(0, [1,2,3], g)$
 
1974
@c print_graph(g)$
 
1975
@c ===end===
 
1976
@example
 
1977
(%i1) load (graphs)$
 
1978
(%i2) g : empty_graph(4)$
 
1979
(%i3) connect_vertices(0, [1,2,3], g)$
 
1980
(%i4) print_graph(g)$
 
1981
Graph on 4 vertices with 3 edges.
 
1982
Adjacencies:
 
1983
  3 :  0
 
1984
  2 :  0
 
1985
  1 :  0
 
1986
  0 :  3  2  1
 
1987
@end example
 
1988
@end deffn
 
1989
 
 
1990
@deffn {Funci@'on} contract_edge (@var{e}, @var{gr})
 
1991
Contrae la arista @var{e} del @var{gr}.
 
1992
 
 
1993
Ejemplo:
 
1994
 
 
1995
@c ===beg===
 
1996
@c load (graphs)$
 
1997
@c g: create_graph(
 
1998
@c       8, [[0,3],[1,3],[2,3],[3,4],[4,5],[4,6],[4,7]])$
 
1999
@c print_graph(g)$
 
2000
@c contract_edge([3,4], g)$
 
2001
@c print_graph(g)$
 
2002
@c ===end===
 
2003
@example
 
2004
(%i1) load (graphs)$
 
2005
(%i2) g: create_graph(
 
2006
       8, [[0,3],[1,3],[2,3],[3,4],[4,5],[4,6],[4,7]])$
 
2007
(%i3) print_graph(g)$
 
2008
Graph on 8 vertices with 7 edges.
 
2009
Adjacencies:
 
2010
  7 :  4
 
2011
  6 :  4
 
2012
  5 :  4
 
2013
  4 :  7  6  5  3
 
2014
  3 :  4  2  1  0
 
2015
  2 :  3
 
2016
  1 :  3
 
2017
  0 :  3
 
2018
(%i4) contract_edge([3,4], g)$
 
2019
(%i5) print_graph(g)$
 
2020
Graph on 7 vertices with 6 edges.
 
2021
Adjacencies:
 
2022
  7 :  3
 
2023
  6 :  3
 
2024
  5 :  3
 
2025
  3 :  5  6  7  2  1  0
 
2026
  2 :  3
 
2027
  1 :  3
 
2028
  0 :  3
 
2029
@end example
 
2030
@end deffn
 
2031
 
 
2032
@deffn {Funci@'on} remove_edge (@var{e}, @var{gr})
 
2033
Elimina la arista @var{e} del grafo @var{gr}.
 
2034
 
 
2035
Ejemplo:
 
2036
 
 
2037
@c ===beg===
 
2038
@c load (graphs)$
 
2039
@c c3 : cycle_graph(3)$
 
2040
@c remove_edge([0,1], c3)$
 
2041
@c print_graph(c3)$
 
2042
@c ===end===
 
2043
@example
 
2044
(%i1) load (graphs)$
 
2045
(%i2) c3 : cycle_graph(3)$
 
2046
(%i3) remove_edge([0,1], c3)$
 
2047
(%i4) print_graph(c3)$
 
2048
Graph on 3 vertices with 2 edges.
 
2049
Adjacencies:
 
2050
  2 :  0  1
 
2051
  1 :  2
 
2052
  0 :  2
 
2053
@end example
 
2054
@end deffn
 
2055
 
 
2056
@deffn {Funci@'on} remove_vertex (@var{v}, @var{gr})
 
2057
Elimina el v@'ertice @var{v} del grafo @var{gr}.
 
2058
@end deffn
 
2059
 
 
2060
@deffn {Funci@'on} vertex_coloring (@var{gr})
 
2061
Devuelve un coloreado @'optimo de los v@'ertice del grafo @var{gr}.
 
2062
 
 
2063
La funci@'on devuelve el n@'umero crom@'atico y una lista representando 
 
2064
el coloreado de los v@'ertices de @var{gr}.
 
2065
 
 
2066
Ejemplo:
 
2067
 
 
2068
@c ===beg===
 
2069
@c load (graphs)$
 
2070
@c p:petersen_graph()$
 
2071
@c vertex_coloring(p);
 
2072
@c ===end===
 
2073
@example
 
2074
(%i1) load (graphs)$
 
2075
(%i2) p:petersen_graph()$
 
2076
(%i3) vertex_coloring(p);
 
2077
(%o3) [3, [[0, 2], [1, 3], [2, 2], [3, 3], [4, 1], [5, 3], 
 
2078
                                [6, 1], [7, 1], [8, 2], [9, 2]]]
 
2079
@end example
 
2080
@end deffn
 
2081
 
 
2082
 
 
2083
@subsection Lectura y escritura de ficheros
 
2084
 
 
2085
@deffn {Funci@'on} dimacs_export (@var{gr}, @var{fl})
 
2086
@deffnx {Funci@'on} dimacs_export (@var{gr}, @var{fl}, @var{comment1}, ..., @var{commentn})
 
2087
Exporta el grafo al fichero @var{fl} en formato DIMACS. Los comentarios
 
2088
adicionales se an@~adir@'an al comienzo del fichero.
 
2089
@end deffn
 
2090
 
 
2091
@deffn {Funci@'on} dimacs_import (@var{fl})
 
2092
Lee el grafo almacenado en el fichero @var{fl} en formato DIMACS.
 
2093
@end deffn
 
2094
 
 
2095
@deffn {Funci@'on} graph6_decode (@var{str})
 
2096
Devuelve el grafo codificado en formato graph6 en la cadena @var{str}.
 
2097
@end deffn
 
2098
 
 
2099
@deffn {Funci@'on} graph6_encode (@var{gr})
 
2100
Devuelve una cadena codificando el grafo @var{gr} en formato graph6.
 
2101
@end deffn
 
2102
 
 
2103
@deffn {Funci@'on} graph6_export (@var{gr_list}, @var{fl})
 
2104
Exporta los grafos de la lista @var{gr_list} al fichero @var{fl} en formato graph6.
 
2105
@end deffn
 
2106
 
 
2107
@deffn {Funci@'on} graph6_import (@var{fl})
 
2108
Lee la lista de grafos almacenados en el fichero @var{fl} en formato graph6.
 
2109
@end deffn
 
2110
 
 
2111
@deffn {Funci@'on} sparse6_decode (@var{str})
 
2112
Devuelve el grafo codificado en formato sparse6 en la cadena @var{str}.
 
2113
@end deffn
 
2114
 
 
2115
@deffn {Funci@'on} sparse6_encode (@var{gr})
 
2116
Devuelve una cadena codificando el grafo @var{gr} en formato sparse6.
 
2117
@end deffn
 
2118
 
 
2119
@deffn {Funci@'on} sparse6_export (@var{gr_list}, @var{fl})
 
2120
Exporta los grafos de la lista @var{gr_list} al fichero @var{fl} en formato sparse6.
 
2121
@end deffn
 
2122
 
 
2123
@deffn {Funci@'on} sparse6_import (@var{fl})
 
2124
Lee la lista de grafos almacenados en el fichero @var{fl} en formato sparse6.
 
2125
@end deffn
 
2126
 
 
2127
@subsection Visualizaci@'on
 
2128
 
 
2129
@deffn {Funci@'on} draw_graph (@var{graph})
 
2130
@deffnx {Funci@'on} draw_graph (@var{graph}, @var{option1}, ..., @var{optionk})
 
2131
Dibuja el grafo utilizando el paquete @code{draw}.
 
2132
 
 
2133
El algoritmo utilizado para posicionar los v@'ertices se especifica con el argumento
 
2134
opcional @var{program}, cuyo valor por defecto es @code{program=spring_embedding}.
 
2135
@var{draw_graph} tambi@'en puede utilizar los programas de graphviz para
 
2136
posicionar los v@'ertices, para lo cual deber@'a instalarse separadamente el programa graphviz.
 
2137
 
 
2138
Los argumentos opcionales de la funci@'on @var{draw_graph} son:
 
2139
 
 
2140
@itemize @bullet
 
2141
@item
 
2142
@dfn{show_id=show}: si @var{show} vale @var{true} entonces se muestran los
 
2143
n@'umeros identificadores de los v@'ertices.
 
2144
@item
 
2145
@dfn{show_label=show}: si @var{show} vale @var{true} entonces se muestran las
 
2146
etiquetas de los v@'ertices.
 
2147
@item
 
2148
@dfn{label_alignment=pos}: indica c@'omo se deben alinear las etiquetas o n@'umeros
 
2149
identificadores de los v@'ertices. Puede ser: @code{left}, @code{center} or @code{right}.
 
2150
El valor por defecto es @code{left}.
 
2151
@item
 
2152
@dfn{show_weight=show}: si @var{show} vale @var{true} entonces se mostrar@'an 
 
2153
los pesos de las aristas.
 
2154
@item
 
2155
@dfn{vertex_type=type}: establece c@'omo se mostrar@'an los v@'ertices. V@'ease la
 
2156
opci@'on @var{point_type} del paquete @code{draw}.
 
2157
@item
 
2158
@dfn{vertex_size=size}: taman@~o de los v@'ertices.
 
2159
@item
 
2160
@dfn{vertex_color=c}: color a utilizar en los v@'ertices.
 
2161
@item
 
2162
@dfn{show_vertices=v_list}: dibuja los v@'ertices de la lista @var{v_list}
 
2163
con colores diferentes.
 
2164
@item
 
2165
@dfn{show_vertex_type=type}: establece c@'omo se mostrar@'an los v@'ertices de
 
2166
@var{show_vertices}. V@'ease la opci@'on @var{point_type} del paquete @code{draw}.
 
2167
@item
 
2168
@dfn{show_vertex_size=size}: taman@~os de los v@'ertices de @var{show_vertices}.
 
2169
@item
 
2170
@dfn{show_vertex_color=c}: color a utilizar en los v@'ertices de la lista @var{show_vertices}.
 
2171
@item
 
2172
@dfn{vertex_partition=part}: una partici@'on
 
2173
@code{[[v1,v2,...],...,[vk,...,vn]]} de los v@'ertices del grafo. Los 
 
2174
v@'ertices de cada lista se dibujar@'an de diferente color.
 
2175
@item
 
2176
@dfn{vertex_coloring=col}: colores de los v@'ertices. Los colores @var{col} deben
 
2177
especificarse en el mismo formato que el devuelto por @var{vertex_coloring}.
 
2178
@item
 
2179
@dfn{edge_color=c}: color a utilizar en las aristas.
 
2180
@item
 
2181
@dfn{edge_width=width}: ancho de las aristas.
 
2182
@item
 
2183
@dfn{edge_type=type}: establece c@'omo se dibujar@'an las aristas. V@'ease la opci@'on
 
2184
@var{line_type} del paquete @code{draw}.
 
2185
@item
 
2186
@dfn{show_edges=e_list}: dibuja las aristas de la lista @var{e_list} con colores diferentes.
 
2187
@item
 
2188
@dfn{show_edge_color=c}: color a utilizar en las aristas de la lista @var{show_edges}.
 
2189
@item
 
2190
@dfn{show_edge_width=width}: anchos de las aristas de @var{show_edges}.
 
2191
@item
 
2192
@dfn{show_edge_type=type}: establece c@'omo se dibujar@'an las aristas de @var{show_edges}.
 
2193
V@'ease la opci@'on @var{line_type} del paquete @code{draw}.
 
2194
@item
 
2195
@dfn{edge_partition=partition}: una partici@'on
 
2196
@code{[[e1,e2,...],...,[ek,...,em]]} de las aristas del grafo. Las aristas
 
2197
de cada lista se dibujar@'an de diferente color.
 
2198
@item
 
2199
@dfn{edge_coloring=col}: colores de las aristas. Los colores @var{col} deben
 
2200
especificarse en el mismo formato que el devuelto por @var{edge_coloring}.
 
2201
@item
 
2202
@dfn{redraw=r}: si @var{redraw} vale @code{true}, las posiciones de los v@'ertices se recalculan
 
2203
incluso si las posiciones est@'an almacenadas de un dibujo previo del grafo.
 
2204
@item
 
2205
@dfn{head_angle=angle}: @'angulo de las flechas de los arcos en los grafos orientados.
 
2206
Valor por defecto: 15.
 
2207
@item
 
2208
@dfn{head_length=len}: longitud de las flechas de los arcos en los grafos orientados.
 
2209
Valor por defecto: 0.1.
 
2210
@item
 
2211
@dfn{spring_embedding_depth=depth}: n@'umero de iteraciones del algoritmo de dibujo de grafos.
 
2212
Valor por defecto: 50.
 
2213
@item
 
2214
@dfn{terminal=term}: terminal utilizado para ver el gr@'afo. V@'ease la opci@'on @var{terminal}
 
2215
del paquete @code{draw}.
 
2216
@item
 
2217
@dfn{file_name=file}: nombre del fichero cuando el terminal especificado no es la pantalla.
 
2218
@item
 
2219
@dfn{program=prg}: establece el programa para posicionado de v@'ertices del grafo. Puede ser
 
2220
cualquiera de los programas graphviz (dot, neato, twopi, circ, fdp), @var{circular} o
 
2221
@var{spring_embedding} o @var{planar_embedding}; @var{planar_embedding} s@'lo est@'a
 
2222
disponible para grafos planares 2-conectados. Si @code{program=spring_embedding},
 
2223
se puede especificar un conjunto de v@'ertices de posici@'on fija con la opci@'on 
 
2224
@var{fixed_vertices}.
 
2225
@item
 
2226
@dfn{fixed_vertices=[]}: especifica una lista de v@'ertices con posiciones fijas en
 
2227
un pol@'{@dotless{i}}gono regular. Se puede utilizar cuando @code{program=spring_embedding}.
 
2228
@end itemize
 
2229
 
 
2230
Ejemplo 1:
 
2231
 
 
2232
@c ===beg===
 
2233
@c load (graphs)$
 
2234
@c g:grid_graph(10,10)$
 
2235
@c m:max_matching(g)$
 
2236
@c draw_graph(g,
 
2237
@c    spring_embedding_depth=100,
 
2238
@c    show_edges=m, edge_type=dots,
 
2239
@c    vertex_size=0)$
 
2240
@c ===end===
 
2241
@example
 
2242
(%i1) load (graphs)$
 
2243
(%i2) g:grid_graph(10,10)$
 
2244
(%i3) m:max_matching(g)$
 
2245
(%i4) draw_graph(g,
 
2246
   spring_embedding_depth=100,
 
2247
   show_edges=m, edge_type=dots,
 
2248
   vertex_size=0)$
 
2249
@end example
 
2250
 
 
2251
@ifhtml
 
2252
@image{../figures/graphs09,6cm}
 
2253
@end ifhtml
 
2254
 
 
2255
Ejemplo 2:
 
2256
 
 
2257
@c ===beg===
 
2258
@c load (graphs)$
 
2259
@c g:create_graph(16,
 
2260
@c     [
 
2261
@c      [0,1],[1,3],[2,3],[0,2],[3,4],[2,4],
 
2262
@c      [5,6],[6,4],[4,7],[6,7],[7,8],[7,10],[7,11],
 
2263
@c      [8,10],[11,10],[8,9],[11,12],[9,15],[12,13],
 
2264
@c      [10,14],[15,14],[13,14]
 
2265
@c     ])$
 
2266
@c t:minimum_spanning_tree(g)$
 
2267
@c draw_graph(
 
2268
@c     g,
 
2269
@c     show_edges=edges(t),
 
2270
@c     show_edge_width=4,
 
2271
@c     show_edge_color=green,
 
2272
@c     vertex_type=filled_square,
 
2273
@c     vertex_size=2
 
2274
@c     )$
 
2275
@c ===end===
 
2276
@example
 
2277
(%i1) load (graphs)$
 
2278
(%i2) g:create_graph(16,
 
2279
    [
 
2280
     [0,1],[1,3],[2,3],[0,2],[3,4],[2,4],
 
2281
     [5,6],[6,4],[4,7],[6,7],[7,8],[7,10],[7,11],
 
2282
     [8,10],[11,10],[8,9],[11,12],[9,15],[12,13],
 
2283
     [10,14],[15,14],[13,14]
 
2284
    ])$
 
2285
(%i3) t:minimum_spanning_tree(g)$
 
2286
(%i4) draw_graph(
 
2287
    g,
 
2288
    show_edges=edges(t),
 
2289
    show_edge_width=4,
 
2290
    show_edge_color=green,
 
2291
    vertex_type=filled_square,
 
2292
    vertex_size=2
 
2293
    )$
 
2294
@end example
 
2295
 
 
2296
@ifhtml
 
2297
@image{../figures/graphs10,6cm}
 
2298
@end ifhtml
 
2299
 
 
2300
Ejemplo 3:
 
2301
 
 
2302
@c ===beg===
 
2303
@c load (graphs)$
 
2304
@c mi : max_independent_set(g)$
 
2305
@c draw_graph(
 
2306
@c     g,
 
2307
@c     show_vertices=mi,
 
2308
@c     show_vertex_type=filled_up_triangle,
 
2309
@c     show_vertex_size=2,
 
2310
@c     edge_color=cyan,
 
2311
@c     edge_width=3,
 
2312
@c     show_id=true,
 
2313
@c     text_color=brown
 
2314
@c     )$
 
2315
@c ===end===
 
2316
@example
 
2317
(%i1) load (graphs)$
 
2318
(%i2) mi : max_independent_set(g)$
 
2319
(%i3) draw_graph(
 
2320
    g,
 
2321
    show_vertices=mi,
 
2322
    show_vertex_type=filled_up_triangle,
 
2323
    show_vertex_size=2,
 
2324
    edge_color=cyan,
 
2325
    edge_width=3,
 
2326
    show_id=true,
 
2327
    text_color=brown
 
2328
    )$
 
2329
@end example
 
2330
 
 
2331
@ifhtml
 
2332
@image{../figures/graphs11,6cm}
 
2333
@end ifhtml
 
2334
 
 
2335
Ejemplo 4:
 
2336
 
 
2337
@c ===beg===
 
2338
@c load (graphs)$
 
2339
@c net : create_graph(
 
2340
@c     [0,1,2,3,4,5],
 
2341
@c     [
 
2342
@c      [[0,1], 3], [[0,2], 2],
 
2343
@c      [[1,3], 1], [[1,4], 3],
 
2344
@c      [[2,3], 2], [[2,4], 2],
 
2345
@c      [[4,5], 2], [[3,5], 2]
 
2346
@c     ],
 
2347
@c     directed=true
 
2348
@c     )$
 
2349
@c draw_graph(
 
2350
@c     net,
 
2351
@c     show_weight=true,
 
2352
@c     vertex_size=0,
 
2353
@c     show_vertices=[0,5],
 
2354
@c     show_vertex_type=filled_square,
 
2355
@c     head_length=0.2,
 
2356
@c     head_angle=10,
 
2357
@c     edge_color="dark-green",
 
2358
@c     text_color=blue
 
2359
@c     )$
 
2360
@c ===end===
 
2361
@example
 
2362
(%i1) load (graphs)$
 
2363
(%i2) net : create_graph(
 
2364
    [0,1,2,3,4,5],
 
2365
    [
 
2366
     [[0,1], 3], [[0,2], 2],
 
2367
     [[1,3], 1], [[1,4], 3],
 
2368
     [[2,3], 2], [[2,4], 2],
 
2369
     [[4,5], 2], [[3,5], 2]
 
2370
    ],
 
2371
    directed=true
 
2372
    )$
 
2373
(%i3) draw_graph(
 
2374
    net,
 
2375
    show_weight=true,
 
2376
    vertex_size=0,
 
2377
    show_vertices=[0,5],
 
2378
    show_vertex_type=filled_square,
 
2379
    head_length=0.2,
 
2380
    head_angle=10,
 
2381
    edge_color="dark-green",
 
2382
    text_color=blue
 
2383
    )$
 
2384
@end example
 
2385
 
 
2386
@ifhtml
 
2387
@image{../figures/graphs12,6cm}
 
2388
@end ifhtml
 
2389
 
 
2390
Ejemplo 5:
 
2391
 
 
2392
@c ===beg===
 
2393
@c load(graphs)$
 
2394
@c g: petersen_graph(20, 2);
 
2395
@c draw_graph(g, redraw=true, program=planar_embedding);
 
2396
@c ===end===
 
2397
@example
 
2398
(%i1) load(graphs)$
 
2399
(%i2) g: petersen_graph(20, 2);
 
2400
(%o2)                         GRAPH
 
2401
(%i3) draw_graph(g, redraw=true, program=planar_embedding);
 
2402
(%o3)                         done
 
2403
@end example
 
2404
 
 
2405
@ifhtml
 
2406
@image{../figures/graphs14,6cm}
 
2407
@end ifhtml
 
2408
 
 
2409
Ejemplo 6:
 
2410
 
 
2411
@c ===beg===
 
2412
@c load(graphs)$
 
2413
@c t: tutte_graph();
 
2414
@c draw_graph(t, redraw=true, fixed_vertices=[1,2,3,4,5,6,7,8,9]);
 
2415
@c ===end===
 
2416
@example
 
2417
(%i1) load(graphs)$
 
2418
(%i2) t: tutte_graph();
 
2419
(%o2)                         GRAPH
 
2420
(%i3) draw_graph(t, redraw=true, fixed_vertices=[1,2,3,4,5,6,7,8,9]);
 
2421
(%o3)                         done
 
2422
@end example
 
2423
 
 
2424
@ifhtml
 
2425
@image{../figures/graphs15,6cm}
 
2426
@end ifhtml
 
2427
 
 
2428
@end deffn
 
2429
 
 
2430
 
 
2431
@defvr {Variable opcional} draw_graph_program
 
2432
Valor por defecto: @var{spring_embedding}.
 
2433
 
 
2434
Programa a utilizar por defecto para posicionar los v@'ertices en la funci@'on @code{draw_graph}.
 
2435
@end defvr
 
2436
 
 
2437
@deffn {Funci@'on} vertices_to_path (@var{v_list})
 
2438
Convierte una lista @var{v_list} de v@'ertices en la lista de aristas del camino
 
2439
definido por la propia @var{v_list}.
 
2440
@end deffn
 
2441
 
 
2442
@deffn {Funci@'on} vertices_to_cycle (@var{v_list})
 
2443
Convierte una lista @var{v_list} de v@'ertices en la lista de aristas del ciclo
 
2444
definido por la propia @var{v_list}.
 
2445
@end deffn
 
2446