2 * Introduction to graphs::
3 * Functions and Variables for graphs::
6 @node Introduction to graphs, Functions and Variables for graphs, graphs, graphs
7 @section Introduction to graphs
9 @code{graphs}パッケージはMaximaにグラフと有向グラフデータ構造を提供します。
10 有向グラフは@var{u}から@var{v}への有向辺と@var{v}から@var{u}への有向辺を持つことができますが、グラフや有向グラフは単純です(多重辺もループも持ちません)。
14 頂点はそれらのid(idは整数)で識別されます。
16 グラフ/有向グラフの頂点にラベルを割り当てることができ、
17 グラフ/有向グラフの辺/弧に重みを割り当てることができます。
19 グラフを描画するためのの@code{draw_graph}関数があります。
20 グラフはforce based 頂点配置アルゴリズムを使って描画されます。
22 @url{http://www.graphviz.org}から利用可能なgraphvizプログラムを使うこともできます。
23 @code{draw_graph}はMaxima @code{draw}パッケージに基づいています。
25 @code{graphs}パッケージを使うには、
26 最初に@code{load("graphs")}でロードしてください。
29 @category{Share packages}
30 @category{Package graphs}
33 @node Functions and Variables for graphs, , Introduction to graphs, graphs
34 @section Functions and Variables for graphs
36 @subsection Building graphs
38 @deffn {関数} create_graph (@var{v_list}, @var{e_list})
39 @deffnx {関数} create_graph (@var{n}, @var{e_list})
40 @deffnx {関数} create_graph (@var{v_list}, @var{e_list}, @var{directed})
41 頂点の集合@var{v_list}上に辺@var{e_list}を使って新しいグラフを生成します。
43 @var{v_list}は頂点のリスト(@code{[v1, v2,..., vn]})もしくは
44 頂点ラベルを持つ頂点のリスト(@code{[[v1,l1], [v2,l2],..., [vn,ln]]})です。
47 頂点は0からn-1までの整数で識別されます。
48 (訳注: 1から始まるMaximaのリストの添字の慣例とは異なることに注意してください。)
50 @var{e_list}は辺のリスト(@code{[e1, e2,..., em]})もしくは
51 辺の重みを持つ辺のリスト(@code{[[e1, w1], ..., [em, wm]]})です。
53 もし@var{directed}が@code{false}でないなら、
59 @c g : create_graph([1,2,3], [[1,2], [2,3], [1,3]])$
63 (%i1) load ("graphs")$
64 (%i2) g : create_graph([1,2,3], [[1,2], [2,3], [1,3]])$
66 Graph on 3 vertices with 3 edges.
73 例2: 辺の重みを持つ頂点3つの循環を生成する。
76 @c g : create_graph([1,2,3], [[[1,2], 1.0], [[2,3], 2.0],
81 (%i1) load ("graphs")$
82 (%i2) g : create_graph([1,2,3], [[[1,2], 1.0], [[2,3], 2.0],
85 Graph on 3 vertices with 3 edges.
101 @c 'directed = true)$
105 (%i1) load ("graphs")$
106 (%i2) d : create_graph(
113 (%i3) print_graph(d)$
114 Digraph on 4 vertices with 4 arcs.
123 @category{Package graphs}
127 @deffn {関数} copy_graph (@var{g})
131 @category{Package graphs}
132 @category{Package graphs - constructions}
136 @deffn {関数} circulant_graph (@var{n}, @var{d})
137 パラメータ @var{n}と @var{d}を持つ巡回グラフを返します。
142 @c g : circulant_graph(10, [1,3])$
146 (%i1) load ("graphs")$
147 (%i2) g : circulant_graph(10, [1,3])$
148 (%i3) print_graph(g)$
149 Graph on 10 vertices with 20 edges.
164 @category{Package graphs}
165 @category{Package graphs - constructions}
169 @deffn {関数} clebsch_graph ()
173 @category{Package graphs}
174 @category{Package graphs - constructions}
178 @deffn {関数} complement_graph (@var{g})
179 グラフ @var{g}の補グラフを返します。
182 @category{Package graphs}
183 @category{Package graphs - constructions}
187 @deffn {関数} complete_bipartite_graph (@var{n}, @var{m})
188 @var{n+m}この頂点上の完全2部グラフを返します。
191 @category{Package graphs}
192 @category{Package graphs - constructions}
196 @deffn {関数} complete_graph (@var{n})
197 @var{n}この頂点上の完全グラフを返します。
200 @category{Package graphs}
201 @category{Package graphs - constructions}
205 @deffn {関数} cycle_digraph (@var{n})
206 @var{n}個の頂点上の有向グラフを返します。
209 @category{Package graphs}
210 @category{Package graphs - constructions}
214 @deffn {関数} cycle_graph (@var{n})
215 @var{n}この頂点上の閉路を返します。
218 @category{Package graphs}
219 @category{Package graphs - constructions}
223 @deffn {関数} cuboctahedron_graph (@var{n})
227 @category{Package graphs}
228 @category{Package graphs - constructions}
232 @deffn {関数} cube_graph (@var{n})
236 @category{Package graphs}
237 @category{Package graphs - constructions}
241 @deffn {関数} dodecahedron_graph ()
245 @category{Package graphs}
246 @category{Package graphs - constructions}
250 @deffn {関数} empty_graph (@var{n})
251 @var{n}個の頂点上の空グラフを返します。
254 @category{Package graphs}
255 @category{Package graphs - constructions}
259 @deffn {関数} flower_snark (@var{n})
260 @var{4n}個の頂点上の花グラフを返します。
265 @c f5 : flower_snark(5)$
266 @c chromatic_index(f5);
269 (%i1) load ("graphs")$
270 (%i2) f5 : flower_snark(5)$
271 (%i3) chromatic_index(f5);
276 @category{Package graphs}
277 @category{Package graphs - constructions}
281 @deffn {関数} from_adjacency_matrix (@var{A})
282 隣接行列 @var{A}で表現されるグラフを返します。
285 @category{Package graphs}
286 @category{Package graphs - constructions}
290 @deffn {関数} frucht_graph ()
294 @category{Package graphs}
295 @category{Package graphs - constructions}
299 @deffn {関数} graph_product (@var{g1}, @var{g1})
300 グラフ @var{g1}と @var{g2}の直積を返します。
305 @c grid : graph_product(path_graph(3), path_graph(4))$
309 (%i1) load ("graphs")$
310 (%i2) grid : graph_product(path_graph(3), path_graph(4))$
311 (%i3) draw_graph(grid)$
315 @category{Package graphs}
316 @category{Package graphs - constructions}
321 @image{@value{figuresfolder}/graphs01,6cm}
324 @deffn {関数} graph_union (@var{g1}, @var{g1})
325 グラフ@var{g1}と @var{g2}の和を返します。
328 @category{Package graphs}
329 @category{Package graphs - constructions}
333 @deffn {関数} grid_graph (@var{n}, @var{m})
334 @var{n x m}グリッドを返します。
337 @category{Package graphs}
338 @category{Package graphs - constructions}
342 @deffn {関数} great_rhombicosidodecahedron_graph ()
346 @category{Package graphs}
347 @category{Package graphs - constructions}
351 @deffn {関数} great_rhombicuboctahedron_graph ()
355 @category{Package graphs}
356 @category{Package graphs - constructions}
360 @deffn {関数} grotzch_graph ()
364 @category{Package graphs}
365 @category{Package graphs - constructions}
369 @deffn {関数} heawood_graph ()
373 @category{Package graphs}
374 @category{Package graphs - constructions}
378 @deffn {関数} icosahedron_graph ()
382 @category{Package graphs}
383 @category{Package graphs - constructions}
387 @deffn {関数} icosidodecahedron_graph ()
391 @category{Package graphs}
392 @category{Package graphs - constructions}
396 @deffn {関数} induced_subgraph (@var{V}, @var{g})
397 グラフ @var{g}の頂点の部分集合 @var{V}上の誘導部分グラフを返します。
402 @c p : petersen_graph()$
404 @c g : induced_subgraph(V, p)$
408 (%i1) load ("graphs")$
409 (%i2) p : petersen_graph()$
410 (%i3) V : [0,1,2,3,4]$
411 (%i4) g : induced_subgraph(V, p)$
412 (%i5) print_graph(g)$
413 Graph on 5 vertices with 5 edges.
423 @category{Package graphs}
424 @category{Package graphs - constructions}
428 @deffn {関数} line_graph (@var{g})
429 グラフ @var{g}の折れ線グラフを返します。
432 @category{Package graphs}
433 @category{Package graphs - constructions}
437 @deffn {関数} make_graph (@var{vrt}, @var{f})
438 @deffnx {関数} make_graph (@var{vrt}, @var{f}, @var{oriented})
439 述語論理関数 @var{f}を使ってグラフを生成します。
441 @var{vrt}は頂点か整数のリスト/集合です。
443 グラフの頂点は1から @var{vrt}までの整数です。
446 2つの頂点 @var{a}と @var{b}は
447 もし @code{f(a,b)=true}なら結合されます。
449 もし @var{directed}が @var{false}でないなら、
455 @c g : make_graph(powerset({1,2,3,4,5}, 2), disjointp)$
456 @c is_isomorphic(g, petersen_graph());
457 @c get_vertex_label(1, g);
460 (%i1) load("graphs")$
461 (%i2) g : make_graph(powerset(@{1,2,3,4,5@}, 2), disjointp)$
462 (%i3) is_isomorphic(g, petersen_graph());
464 (%i4) get_vertex_label(1, g);
471 @c f(i, j) := is (mod(j, i)=0)$
472 @c g : make_graph(20, f, directed=true)$
473 @c out_neighbors(4, g);
474 @c in_neighbors(18, g);
477 (%i1) load("graphs")$
478 (%i2) f(i, j) := is (mod(j, i)=0)$
479 (%i3) g : make_graph(20, f, directed=true)$
480 (%i4) out_neighbors(4, g);
481 (%o4) [8, 12, 16, 20]
482 (%i5) in_neighbors(18, g);
483 (%o5) [1, 2, 3, 6, 9]
487 @category{Package graphs}
488 @category{Package graphs - constructions}
492 @deffn {関数} mycielski_graph (@var{g})
493 グラフ @var{g}のMycielskiグラフを返します。
496 @category{Package graphs}
497 @category{Package graphs - constructions}
501 @deffn {関数} new_graph ()
505 @category{Package graphs}
506 @category{Package graphs - constructions}
510 @deffn {関数} path_digraph (@var{n})
511 @var{n}個の頂点上の有向道を返します。
514 @category{Package graphs}
515 @category{Package graphs - constructions}
519 @deffn {関数} path_graph (@var{n})
523 @category{Package graphs}
524 @category{Package graphs - constructions}
528 @deffn {関数} petersen_graph ()
529 @deffnx {関数} petersen_graph (@var{n}, @var{d})
530 Petersenグラフ @var{P_@{n,d@}}を返します。
531 @var{n}と @var{d}のデフォルト値は
532 @code{n=5}と @code{d=2}です。
535 @category{Package graphs}
536 @category{Package graphs - constructions}
540 @deffn {関数} random_bipartite_graph (@var{a}, @var{b}, @var{p})
541 @code{a+b}個の頂点上のランダムな2部グラフを返します。
542 辺それぞれは確率 @var{p}で存在します。
545 @category{Package graphs}
546 @category{Package graphs - constructions}
550 @deffn {関数} random_digraph (@var{n}, @var{p})
551 @code{n}個の頂点上のランダムな有向グラフを返します。
552 弧それぞれは確率 @var{p}で存在します。
555 @category{Package graphs}
556 @category{Package graphs - constructions}
560 @deffn {関数} random_regular_graph (@var{n})
561 @deffnx {関数} random_regular_graph (@var{n}, @var{d})
563 ランダムな@var{d}正則グラフを返します。
564 @var{d}のデフォルト値は @code{d=3}です。
567 @category{Package graphs}
568 @category{Package graphs - constructions}
572 @deffn {関数} random_graph (@var{n}, @var{p})
573 @var{n}個の頂点上のランダムグラフを返します。
574 辺それぞれは確率 @var{p}で存在します。
577 @category{Package graphs}
578 @category{Package graphs - constructions}
582 @deffn {関数} random_graph1 (@var{n}, @var{m})
583 @var{n}個の頂点とランダムな @var{m}個の辺上のランダムグラフを返します。
586 @category{Package graphs}
587 @category{Package graphs - constructions}
591 @deffn {関数} random_network (@var{n}, @var{p}, @var{w})
592 @var{n}個の頂点上のランダムネットワークを返します。
593 弧それぞれは確率 @var{p}で存在し、
594 範囲 @code{[0,w]}の中に重みを持ちます。
595 関数はリスト @code{[network, source, sink]}を返します。
600 @c [net, s, t] : random_network(50, 0.2, 10.0);
601 @c max_flow(net, s, t)$
605 (%i1) load ("graphs")$
606 (%i2) [net, s, t] : random_network(50, 0.2, 10.0);
607 (%o2) [DIGRAPH, 50, 51]
608 (%i3) max_flow(net, s, t)$
610 (%o4) 27.65981397932507
614 @category{Package graphs}
615 @category{Package graphs - constructions}
619 @deffn {関数} random_tournament (@var{n})
620 @var{n}個の頂点上のランダムなトーナメントを返します。
623 @category{Package graphs}
624 @category{Package graphs - constructions}
628 @deffn {関数} random_tree (@var{n})
629 @var{n}個の頂点上のランダムな木を返します。
632 @category{Package graphs}
633 @category{Package graphs - constructions}
637 @deffn {関数} small_rhombicosidodecahedron_graph ()
641 @category{Package graphs}
642 @category{Package graphs - constructions}
646 @deffn {関数} small_rhombicuboctahedron_graph ()
650 @category{Package graphs}
651 @category{Package graphs - constructions}
655 @deffn {関数} snub_cube_graph ()
659 @category{Package graphs}
660 @category{Package graphs - constructions}
664 @deffn {関数} snub_dodecahedron_graph ()
668 @category{Package graphs}
669 @category{Package graphs - constructions}
673 @deffn {関数} truncated_cube_graph ()
677 @category{Package graphs}
678 @category{Package graphs - constructions}
682 @deffn {関数} truncated_dodecahedron_graph ()
686 @category{Package graphs}
687 @category{Package graphs - constructions}
692 @deffn {関数} truncated_icosahedron_graph ()
696 @category{Package graphs}
697 @category{Package graphs - constructions}
702 @deffn {関数} truncated_tetrahedron_graph ()
706 @category{Package graphs}
707 @category{Package graphs - constructions}
711 @deffn {関数} tutte_graph ()
715 @category{Package graphs}
716 @category{Package graphs - constructions}
720 @deffn {関数} underlying_graph (@var{g})
721 有向グラフ @var{g}の台グラフを返します。
724 @category{Package graphs}
725 @category{Package graphs - constructions}
729 @deffn {関数} wheel_graph (@var{n})
730 @var{n+1}個の頂点上の車輪グラフを返します。
733 @category{Package graphs}
734 @category{Package graphs - constructions}
738 @subsection Graph properties
740 @deffn {関数} adjacency_matrix (@var{gr})
741 グラフ @var{gr}の隣接行列を返します。
746 @c c5 : cycle_graph(4)$
747 @c adjacency_matrix(c5);
750 (%i1) load ("graphs")$
751 (%i2) c5 : cycle_graph(4)$
752 (%i3) adjacency_matrix(c5);
763 @category{Package graphs}
764 @category{Package graphs - properties}
768 @deffn {関数} average_degree (@var{gr})
769 グラフ @var{gr}に関する平均次数を返します。
774 @c average_degree(grotzch_graph());
777 (%i1) load ("graphs")$
778 (%i2) average_degree(grotzch_graph());
785 @category{Package graphs}
786 @category{Package graphs - properties}
790 @deffn {関数} biconnected_components (@var{gr})
791 グラフ @var{gr}の2連結成分(の頂点集合)を返します
799 @c [1,2],[2,3],[2,4],[3,4],
800 @c [4,5],[5,6],[4,6],[6,7]
802 @c biconnected_components(g);
805 (%i1) load ("graphs")$
806 (%i2) g : create_graph(
809 [1,2],[2,3],[2,4],[3,4],
810 [4,5],[5,6],[4,6],[6,7]
812 (%i3) biconnected_components(g);
813 (%o3) [[6, 7], [4, 5, 6], [1, 2], [2, 3, 4]]
817 @image{@value{figuresfolder}/graphs13,6cm}
821 @category{Package graphs}
822 @category{Package graphs - properties}
826 @deffn {関数} bipartition (@var{gr})
827 グラフ @var{gr}の頂点の2分割か、もし @var{gr}が2部でないなら空のリストを返します。
833 @c h : heawood_graph()$
834 @c [A,B]:bipartition(h);
835 @c draw_graph(h, show_vertices=A, program=circular)$
838 (%i1) load ("graphs")$
839 (%i2) h : heawood_graph()$
840 (%i3) [A,B]:bipartition(h);
841 (%o3) [[8, 12, 6, 10, 0, 2, 4], [13, 5, 11, 7, 9, 1, 3]]
842 (%i4) draw_graph(h, show_vertices=A, program=circular)$
846 @category{Package graphs}
847 @category{Package graphs - properties}
852 @image{@value{figuresfolder}/graphs02,6cm}
855 @deffn {関数} chromatic_index (@var{gr})
856 グラフ @var{gr}の彩色指数を返します。
861 @c p : petersen_graph()$
862 @c chromatic_index(p);
865 (%i1) load ("graphs")$
866 (%i2) p : petersen_graph()$
867 (%i3) chromatic_index(p);
872 @category{Package graphs}
873 @category{Package graphs - properties}
877 @deffn {関数} chromatic_number (@var{gr})
878 グラフ @var{gr}の彩色数を返します。
883 @c chromatic_number(cycle_graph(5));
884 @c chromatic_number(cycle_graph(6));
887 (%i1) load ("graphs")$
888 (%i2) chromatic_number(cycle_graph(5));
890 (%i3) chromatic_number(cycle_graph(6));
895 @category{Package graphs}
896 @category{Package graphs - properties}
900 @deffn {関数} clear_edge_weight (@var{e}, @var{gr})
901 グラフ @var{gr}の辺 @var{e}の重みを削除します。
907 @c g : create_graph(3, [[[0,1], 1.5], [[1,2], 1.3]])$
908 @c get_edge_weight([0,1], g);
909 @c clear_edge_weight([0,1], g)$
910 @c get_edge_weight([0,1], g);
913 (%i1) load ("graphs")$
914 (%i2) g : create_graph(3, [[[0,1], 1.5], [[1,2], 1.3]])$
915 (%i3) get_edge_weight([0,1], g);
917 (%i4) clear_edge_weight([0,1], g)$
918 (%i5) get_edge_weight([0,1], g);
923 @category{Package graphs}
924 @category{Package graphs - properties}
928 @deffn {関数} clear_vertex_label (@var{v}, @var{gr})
929 グラフ @var{gr}の頂点 @var{v}のラベルを削除します。
934 @c g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
935 @c get_vertex_label(0, g);
936 @c clear_vertex_label(0, g);
937 @c get_vertex_label(0, g);
940 (%i1) load ("graphs")$
941 (%i2) g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
942 (%i3) get_vertex_label(0, g);
944 (%i4) clear_vertex_label(0, g);
946 (%i5) get_vertex_label(0, g);
951 @category{Package graphs}
952 @category{Package graphs - properties}
956 @deffn {関数} connected_components (@var{gr})
957 グラフ @var{gr}の連携成分(の頂点集合)を返します。
962 @c g: graph_union(cycle_graph(5), path_graph(4))$
963 @c connected_components(g);
966 (%i1) load ("graphs")$
967 (%i2) g: graph_union(cycle_graph(5), path_graph(4))$
968 (%i3) connected_components(g);
969 (%o3) [[1, 2, 3, 4, 0], [8, 7, 6, 5]]
973 @category{Package graphs}
974 @category{Package graphs - properties}
978 @deffn {関数} diameter (@var{gr})
979 グラフ @var{gr}の直径を返します。
984 @c diameter(dodecahedron_graph());
987 (%i1) load ("graphs")$
988 (%i2) diameter(dodecahedron_graph());
993 @category{Package graphs}
994 @category{Package graphs - properties}
998 @deffn {関数} edge_coloring (@var{gr})
999 グラフ @var{gr}の辺の最適色づけを返します。
1001 関数は彩色指数と@var{gr}の辺の色付けを表すリストを返します。
1007 @c p : petersen_graph()$
1008 @c [ch_index, col] : edge_coloring(p);
1009 @c assoc([0,1], col);
1010 @c assoc([0,5], col);
1013 (%i1) load ("graphs")$
1014 (%i2) p : petersen_graph()$
1015 (%i3) [ch_index, col] : edge_coloring(p);
1016 (%o3) [4, [[[0, 5], 3], [[5, 7], 1], [[0, 1], 1], [[1, 6], 2],
1017 [[6, 8], 1], [[1, 2], 3], [[2, 7], 4], [[7, 9], 2], [[2, 3], 2],
1018 [[3, 8], 3], [[5, 8], 2], [[3, 4], 1], [[4, 9], 4], [[6, 9], 3],
1020 (%i4) assoc([0,1], col);
1022 (%i5) assoc([0,5], col);
1027 @category{Package graphs}
1028 @category{Package graphs - properties}
1032 @deffn {関数} degree_sequence (@var{gr})
1033 グラフ @var{gr}の頂点次数のリストを返します。
1038 @c degree_sequence(random_graph(10, 0.4));
1041 (%i1) load ("graphs")$
1042 (%i2) degree_sequence(random_graph(10, 0.4));
1043 (%o2) [2, 2, 2, 2, 2, 2, 3, 3, 3, 3]
1047 @category{Package graphs}
1048 @category{Package graphs - properties}
1052 @deffn {関数} edge_connectivity (@var{gr})
1053 グラフ @var{gr}の辺連結性を返します。
1055 @code{min_edge_cut}も参照してください。
1058 @category{Package graphs}
1059 @category{Package graphs - properties}
1063 @deffn {関数} edges (@var{gr})
1064 (有向)グラフ @var{gr}の辺(弧)のリストを返します。
1069 @c edges(complete_graph(4));
1072 (%i1) load ("graphs")$
1073 (%i2) edges(complete_graph(4));
1074 (%o2) [[2, 3], [1, 3], [1, 2], [0, 3], [0, 2], [0, 1]]
1078 @category{Package graphs}
1079 @category{Package graphs - properties}
1083 @deffn {関数} get_edge_weight (@var{e}, @var{gr})
1084 @deffnx {関数} get_edge_weight (@var{e}, @var{gr}, @var{ifnot})
1085 グラフ @var{gr}の辺 @var{e}の重みを返します。
1090 関数はエラーをシグナルするか、オプション引数 @var{ifnot}を返します。
1095 @c c5 : cycle_graph(5)$
1096 @c get_edge_weight([1,2], c5);
1097 @c set_edge_weight([1,2], 2.0, c5);
1098 @c get_edge_weight([1,2], c5);
1101 (%i1) load ("graphs")$
1102 (%i2) c5 : cycle_graph(5)$
1103 (%i3) get_edge_weight([1,2], c5);
1105 (%i4) set_edge_weight([1,2], 2.0, c5);
1107 (%i5) get_edge_weight([1,2], c5);
1112 @category{Package graphs}
1113 @category{Package graphs - properties}
1117 @deffn {関数} get_vertex_label (@var{v}, @var{gr})
1118 グラフ @var{gr}の頂点 @var{v}のラベルを返します。
1123 @c g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
1124 @c get_vertex_label(0, g);
1127 (%i1) load ("graphs")$
1128 (%i2) g : create_graph([[0,"Zero"], [1, "One"]], [[0,1]])$
1129 (%i3) get_vertex_label(0, g);
1134 @category{Package graphs}
1135 @category{Package graphs - properties}
1139 @deffn {関数} graph_charpoly (@var{gr}, @var{x})
1140 グラフ @var{gr}の(変数 @var{x}に関する)特性多項式を返します。
1145 @c p : petersen_graph()$
1146 @c graph_charpoly(p, x), factor;
1149 (%i1) load ("graphs")$
1150 (%i2) p : petersen_graph()$
1151 (%i3) graph_charpoly(p, x), factor;
1153 (%o3) (x - 3) (x - 1) (x + 2)
1157 @category{Package graphs}
1158 @category{Package graphs - properties}
1162 @deffn {関数} graph_center (@var{gr})
1163 グラフ @var{gr}の中心を返します。
1168 @c g : grid_graph(5,5)$
1172 (%i1) load ("graphs")$
1173 (%i2) g : grid_graph(5,5)$
1174 (%i3) graph_center(g);
1179 @category{Package graphs}
1180 @category{Package graphs - properties}
1184 @deffn {関数} graph_eigenvalues (@var{gr})
1185 グラフ @var{gr}の固有値を返します。
1187 maxima @code{eigenvalue}関数と同じフォーマットで固有値を返します。
1192 @c p : petersen_graph()$
1193 @c graph_eigenvalues(p);
1196 (%i1) load ("graphs")$
1197 (%i2) p : petersen_graph()$
1198 (%i3) graph_eigenvalues(p);
1199 (%o3) [[3, - 2, 1], [1, 4, 5]]
1203 @category{Package graphs}
1204 @category{Package graphs - properties}
1208 @deffn {関数} graph_periphery (@var{gr})
1209 グラフ @var{gr}の外周を返します。
1214 @c g : grid_graph(5,5)$
1215 @c graph_periphery(g);
1218 (%i1) load ("graphs")$
1219 (%i2) g : grid_graph(5,5)$
1220 (%i3) graph_periphery(g);
1221 (%o3) [24, 20, 4, 0]
1225 @category{Package graphs}
1226 @category{Package graphs - properties}
1230 @deffn {関数} graph_size (@var{gr})
1231 グラフ @var{gr}の辺の数を返します。
1236 @c p : petersen_graph()$
1240 (%i1) load ("graphs")$
1241 (%i2) p : petersen_graph()$
1242 (%i3) graph_size(p);
1247 @category{Package graphs}
1248 @category{Package graphs - properties}
1252 @deffn {関数} graph_order (@var{gr})
1253 グラフ @var{gr}の頂点の数を返します。
1258 @c p : petersen_graph()$
1262 (%i1) load ("graphs")$
1263 (%i2) p : petersen_graph()$
1264 (%i3) graph_order(p);
1269 @category{Package graphs}
1270 @category{Package graphs - properties}
1274 @deffn {関数} girth (@var{gr})
1275 @var{gr}の最短閉路の長さを返します。
1280 @c g : heawood_graph()$
1284 (%i1) load ("graphs")$
1285 (%i2) g : heawood_graph()$
1291 @category{Package graphs}
1292 @category{Package graphs - properties}
1296 @deffn {関数} hamilton_cycle (@var{gr})
1297 グラフ @var{gr}のHamilton閉路を返します。
1298 もし @var{gr}がハミルトニアンでないなら、空のリストを返します。
1303 @c c : cube_graph(3)$
1304 @c hc : hamilton_cycle(c);
1305 @c draw_graph(c, show_edges=vertices_to_cycle(hc))$
1308 (%i1) load ("graphs")$
1309 (%i2) c : cube_graph(3)$
1310 (%i3) hc : hamilton_cycle(c);
1311 (%o3) [7, 3, 2, 6, 4, 0, 1, 5, 7]
1312 (%i4) draw_graph(c, show_edges=vertices_to_cycle(hc))$
1316 @category{Package graphs}
1317 @category{Package graphs - properties}
1322 @image{@value{figuresfolder}/graphs03,6cm}
1325 @deffn {関数} hamilton_path (@var{gr})
1326 グラフ @var{gr}のHamilton経路を返します。
1327 もし @var{gr}がHamilton経路を持たないなら、空のリストを返します。
1332 @c p : petersen_graph()$
1333 @c hp : hamilton_path(p);
1334 @c draw_graph(p, show_edges=vertices_to_path(hp))$
1337 (%i1) load ("graphs")$
1338 (%i2) p : petersen_graph()$
1339 (%i3) hp : hamilton_path(p);
1340 (%o3) [0, 5, 7, 2, 1, 6, 8, 3, 4, 9]
1341 (%i4) draw_graph(p, show_edges=vertices_to_path(hp))$
1345 @category{Package graphs}
1346 @category{Package graphs - properties}
1351 @image{@value{figuresfolder}/graphs04,6cm}
1354 @deffn {関数} isomorphism (@var{gr1}, @var{gr2})
1356 グラフ/有向グラフ @var{gr1}と @var{gr2}の間の同型写像を返します。
1357 もし @var{gr1}と @var{gr2}が同型でないなら、空のリストを返します。
1362 @c clk5:complement_graph(line_graph(complete_graph(5)))$
1363 @c isomorphism(clk5, petersen_graph());
1366 (%i1) load ("graphs")$
1367 (%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
1368 (%i3) isomorphism(clk5, petersen_graph());
1369 (%o3) [9 -> 0, 2 -> 1, 6 -> 2, 5 -> 3, 0 -> 4, 1 -> 5, 3 -> 6,
1370 4 -> 7, 7 -> 8, 8 -> 9]
1374 @category{Package graphs}
1375 @category{Package graphs - properties}
1379 @deffn {関数} in_neighbors (@var{v}, @var{gr})
1380 有向グラフ @var{gr}の頂点 @var{v}の内隣接点のリストを返します。
1385 @c p : path_digraph(3)$
1386 @c in_neighbors(2, p);
1387 @c out_neighbors(2, p);
1390 (%i1) load ("graphs")$
1391 (%i2) p : path_digraph(3)$
1392 (%i3) in_neighbors(2, p);
1394 (%i4) out_neighbors(2, p);
1399 @category{Package graphs}
1400 @category{Package graphs - properties}
1404 @deffn {関数} is_biconnected (@var{gr})
1405 もし @var{gr}が2連結なら @code{true}を、
1406 そうでないなら、 @code{false}を返します。
1411 @c is_biconnected(cycle_graph(5));
1412 @c is_biconnected(path_graph(5));
1415 (%i1) load ("graphs")$
1416 (%i2) is_biconnected(cycle_graph(5));
1418 (%i3) is_biconnected(path_graph(5));
1423 @category{Package graphs}
1424 @category{Package graphs - properties}
1428 @deffn {関数} is_bipartite (@var{gr})
1429 もし @var{gr}が2部(2彩色)なら @code{true}を、
1430 そうでないなら、 @code{false}を返します。
1435 @c is_bipartite(petersen_graph());
1436 @c is_bipartite(heawood_graph());
1439 (%i1) load ("graphs")$
1440 (%i2) is_bipartite(petersen_graph());
1442 (%i3) is_bipartite(heawood_graph());
1447 @category{Package graphs}
1448 @category{Package graphs - properties}
1452 @deffn {関数} is_connected (@var{gr})
1453 もしグラフ @var{gr}が連結なら @code{true}を、
1454 そうでないなら @code{false}を返します。
1459 @c is_connected(graph_union(cycle_graph(4), path_graph(3)));
1462 (%i1) load ("graphs")$
1463 (%i2) is_connected(graph_union(cycle_graph(4), path_graph(3)));
1468 @category{Package graphs}
1469 @category{Package graphs - properties}
1473 @deffn {関数} is_digraph (@var{gr})
1474 もし @var{gr}が有向グラフなら @code{true}を、
1475 そうでないなら @code{false}を返します。
1480 @c is_digraph(path_graph(5));
1481 @c is_digraph(path_digraph(5));
1484 (%i1) load ("graphs")$
1485 (%i2) is_digraph(path_graph(5));
1487 (%i3) is_digraph(path_digraph(5));
1492 @category{Package graphs}
1493 @category{Package graphs - properties}
1497 @deffn {関数} is_edge_in_graph (@var{e}, @var{gr})
1498 もし @var{e}が(有向)グラフ @var{g}の辺(弧)なら @code{true}を、
1499 そうでないなら @code{false}を返します。
1504 @c c4 : cycle_graph(4)$
1505 @c is_edge_in_graph([2,3], c4);
1506 @c is_edge_in_graph([3,2], c4);
1507 @c is_edge_in_graph([2,4], c4);
1508 @c is_edge_in_graph([3,2], cycle_digraph(4));
1511 (%i1) load ("graphs")$
1512 (%i2) c4 : cycle_graph(4)$
1513 (%i3) is_edge_in_graph([2,3], c4);
1515 (%i4) is_edge_in_graph([3,2], c4);
1517 (%i5) is_edge_in_graph([2,4], c4);
1519 (%i6) is_edge_in_graph([3,2], cycle_digraph(4));
1524 @category{Package graphs}
1525 @category{Package graphs - properties}
1529 @deffn {関数} is_graph (@var{gr})
1530 もし @var{gr}がグラフなら @code{true}を、
1531 そうでないなら @code{false}を返します。
1536 @c is_graph(path_graph(5));
1537 @c is_graph(path_digraph(5));
1540 (%i1) load ("graphs")$
1541 (%i2) is_graph(path_graph(5));
1543 (%i3) is_graph(path_digraph(5));
1548 @category{Package graphs}
1549 @category{Package graphs - properties}
1553 @deffn {関数} is_graph_or_digraph (@var{gr})
1554 もし @var{gr}がグラフか有向グラフなら @code{true}を、
1555 そうでないなら @code{false}を返します。
1560 @c is_graph_or_digraph(path_graph(5));
1561 @c is_graph_or_digraph(path_digraph(5));
1564 (%i1) load ("graphs")$
1565 (%i2) is_graph_or_digraph(path_graph(5));
1567 (%i3) is_graph_or_digraph(path_digraph(5));
1572 @category{Package graphs}
1573 @category{Package graphs - properties}
1577 @deffn {関数} is_isomorphic (@var{gr1}, @var{gr2})
1579 もし グラフ/有向グラフ @var{gr1}と @var{gr2}が同型なら @code{true}を、
1580 そうでないなら @code{false}を返します。
1582 @code{isomorphism}も参照してください。
1587 @c clk5:complement_graph(line_graph(complete_graph(5)))$
1588 @c is_isomorphic(clk5, petersen_graph());
1591 (%i1) load ("graphs")$
1592 (%i2) clk5:complement_graph(line_graph(complete_graph(5)))$
1593 (%i3) is_isomorphic(clk5, petersen_graph());
1598 @category{Package graphs}
1599 @category{Package graphs - properties}
1603 @deffn {関数} is_planar (@var{gr})
1605 もし @var{gr}が平面グラフなら @code{true}を、
1606 そうでないなら @code{false}を返します。
1608 使われているアルゴリズムはDemoucronのアルゴリズムです。
1614 @c is_planar(dodecahedron_graph());
1615 @c is_planar(petersen_graph());
1616 @c is_planar(petersen_graph(10,2));
1619 (%i1) load ("graphs")$
1620 (%i2) is_planar(dodecahedron_graph());
1622 (%i3) is_planar(petersen_graph());
1624 (%i4) is_planar(petersen_graph(10,2));
1629 @category{Package graphs}
1630 @category{Package graphs - properties}
1634 @deffn {関数} is_sconnected (@var{gr})
1635 もし有向グラフ @var{gr}が強連結なら @code{true}を、
1636 そうでないなら @code{false}を返します。
1641 @c is_sconnected(cycle_digraph(5));
1642 @c is_sconnected(path_digraph(5));
1645 (%i1) load ("graphs")$
1646 (%i2) is_sconnected(cycle_digraph(5));
1648 (%i3) is_sconnected(path_digraph(5));
1653 @category{Package graphs}
1654 @category{Package graphs - properties}
1658 @deffn {関数} is_vertex_in_graph (@var{v}, @var{gr})
1659 もし @var{v}がグラフ @var{g}の頂点なら @code{true}を、
1660 そうでないなら @code{false}を返します。
1665 @c c4 : cycle_graph(4)$
1666 @c is_vertex_in_graph(0, c4);
1667 @c is_vertex_in_graph(6, c4);
1670 (%i1) load ("graphs")$
1671 (%i2) c4 : cycle_graph(4)$
1672 (%i3) is_vertex_in_graph(0, c4);
1674 (%i4) is_vertex_in_graph(6, c4);
1679 @category{Package graphs}
1680 @category{Package graphs - properties}
1684 @deffn {関数} is_tree (@var{gr})
1685 もし @var{gr}が木なら @code{true}を、
1686 そうでないなら @code{false}を返します。
1691 @c is_tree(random_tree(4));
1692 @c is_tree(graph_union(random_tree(4), random_tree(5)));
1695 (%i1) load ("graphs")$
1696 (%i2) is_tree(random_tree(4));
1698 (%i3) is_tree(graph_union(random_tree(4), random_tree(5)));
1703 @category{Package graphs}
1704 @category{Package graphs - properties}
1708 @deffn {関数} laplacian_matrix (@var{gr})
1709 グラフ @var{gr}のLaplace行列を返します。
1714 @c laplacian_matrix(cycle_graph(5));
1717 (%i1) load ("graphs")$
1718 (%i2) laplacian_matrix(cycle_graph(5));
1723 (%o2) [ 0 - 1 2 - 1 0 ]
1731 @category{Package graphs}
1732 @category{Package graphs - properties}
1736 @deffn {関数} max_clique (@var{gr})
1737 グラフ @var{gr}の最大クリークを返します。
1742 @c g : random_graph(100, 0.5)$
1746 (%i1) load ("graphs")$
1747 (%i2) g : random_graph(100, 0.5)$
1748 (%i3) max_clique(g);
1749 (%o3) [6, 12, 31, 36, 52, 59, 62, 63, 80]
1753 @category{Package graphs}
1754 @category{Package graphs - properties}
1758 @deffn {関数} max_degree (@var{gr})
1759 グラフ @var{gr}の頂点の最大次数と最大次数の頂点を返します。
1764 @c g : random_graph(100, 0.02)$
1766 @c vertex_degree(95, g);
1769 (%i1) load ("graphs")$
1770 (%i2) g : random_graph(100, 0.02)$
1771 (%i3) max_degree(g);
1773 (%i4) vertex_degree(95, g);
1778 @category{Package graphs}
1779 @category{Package graphs - properties}
1783 @deffn {関数} max_flow (@var{net}, @var{s}, @var{t})
1784 ソース @var{s}とシンク @var{t}を持ち
1785 ネットワーク @var{net}を通る最大フローを返します。
1788 最適フローで弧の重みを表現するリストを返します。
1793 @c net : create_graph(
1804 @c [flow_value, flow] : max_flow(net, 1, 6);
1806 @c for u in out_neighbors(1, net)
1807 @c do fl : fl + assoc([1, u], flow)$
1811 (%i1) load ("graphs")$
1812 (%i2) net : create_graph(
1823 (%i3) [flow_value, flow] : max_flow(net, 1, 6);
1824 (%o3) [0.7, [[[1, 2], 0.5], [[1, 3], 0.2], [[2, 4], 0.2],
1825 [[2, 5], 0.3], [[3, 4], 0.1], [[3, 5], 0.1], [[4, 6], 0.3],
1828 (%i5) for u in out_neighbors(1, net)
1829 do fl : fl + assoc([1, u], flow)$
1835 @category{Package graphs}
1836 @category{Package graphs - properties}
1840 @deffn {関数} max_independent_set (@var{gr})
1841 グラフ @var{gr}の最大独立集合を返します。
1846 @c d : dodecahedron_graph()$
1847 @c mi : max_independent_set(d);
1848 @c draw_graph(d, show_vertices=mi)$
1851 (%i1) load ("graphs")$
1852 (%i2) d : dodecahedron_graph()$
1853 (%i3) mi : max_independent_set(d);
1854 (%o3) [0, 3, 5, 9, 10, 11, 18, 19]
1855 (%i4) draw_graph(d, show_vertices=mi)$
1859 @category{Package graphs}
1860 @category{Package graphs - properties}
1865 @image{@value{figuresfolder}/graphs05,6cm}
1868 @deffn {関数} max_matching (@var{gr})
1869 グラフ @var{gr}の最大マッチングを返します。
1874 @c d : dodecahedron_graph()$
1875 @c m : max_matching(d);
1876 @c draw_graph(d, show_edges=m)$
1879 (%i1) load ("graphs")$
1880 (%i2) d : dodecahedron_graph()$
1881 (%i3) m : max_matching(d);
1882 (%o3) [[5, 7], [8, 9], [6, 10], [14, 19], [13, 18], [12, 17],
1883 [11, 16], [0, 15], [3, 4], [1, 2]]
1884 (%i4) draw_graph(d, show_edges=m)$
1888 @category{Package graphs}
1889 @category{Package graphs - properties}
1894 @image{@value{figuresfolder}/graphs06,6cm}
1897 @deffn {関数} min_degree (@var{gr})
1898 グラフ @var{gr}の頂点の最小次数と最小次数の頂点を返します。
1903 @c g : random_graph(100, 0.1)$
1905 @c vertex_degree(21, g);
1908 (%i1) load ("graphs")$
1909 (%i2) g : random_graph(100, 0.1)$
1910 (%i3) min_degree(g);
1912 (%i4) vertex_degree(21, g);
1917 @category{Package graphs}
1918 @category{Package graphs - properties}
1922 @deffn {関数} min_edge_cut (@var{gr})
1923 グラフ @var{gr}の最小切断辺を返します。
1925 @code{edge_connectivity}も参照してください。
1928 @category{Package graphs}
1929 @category{Package graphs - properties}
1933 @deffn {関数} min_vertex_cover (@var{gr})
1934 グラフ @var{gr}の最小頂点被覆を返します。
1937 @category{Package graphs}
1938 @category{Package graphs - properties}
1942 @deffn {関数} min_vertex_cut (@var{gr})
1943 Returns the minimum vertex cut in the graph
1944 グラフ @var{gr}の最小頂点切断を返します。
1946 @code{vertex_connectivity}も参照してください。
1949 @category{Package graphs}
1950 @category{Package graphs - properties}
1954 @deffn {関数} minimum_spanning_tree (@var{gr})
1955 グラフ @var{gr}の最小全域木を返します。
1960 @c g : graph_product(path_graph(10), path_graph(10))$
1961 @c t : minimum_spanning_tree(g)$
1962 @c draw_graph(g, show_edges=edges(t))$
1965 (%i1) load ("graphs")$
1966 (%i2) g : graph_product(path_graph(10), path_graph(10))$
1967 (%i3) t : minimum_spanning_tree(g)$
1968 (%i4) draw_graph(g, show_edges=edges(t))$
1972 @category{Package graphs}
1973 @category{Package graphs - properties}
1978 @image{@value{figuresfolder}/graphs07,6cm}
1981 @deffn {関数} neighbors (@var{v}, @var{gr})
1982 グラフ @var{gr}の頂点 @var{v}の隣接点のリストを返します。
1987 @c p : petersen_graph()$
1991 (%i1) load ("graphs")$
1992 (%i2) p : petersen_graph()$
1993 (%i3) neighbors(3, p);
1998 @category{Package graphs}
1999 @category{Package graphs - properties}
2003 @deffn {関数} odd_girth (@var{gr})
2004 グラフ @var{gr}の最短奇閉路の長さを返します。
2009 @c g : graph_product(cycle_graph(4), cycle_graph(7))$
2014 (%i1) load ("graphs")$
2015 (%i2) g : graph_product(cycle_graph(4), cycle_graph(7))$
2023 @category{Package graphs}
2024 @category{Package graphs - properties}
2028 @deffn {関数} out_neighbors (@var{v}, @var{gr})
2029 有向グラフ @var{gr}の頂点 @var{v}の外隣接点のリストを返します。
2034 @c p : path_digraph(3)$
2035 @c in_neighbors(2, p);
2036 @c out_neighbors(2, p);
2039 (%i1) load ("graphs")$
2040 (%i2) p : path_digraph(3)$
2041 (%i3) in_neighbors(2, p);
2043 (%i4) out_neighbors(2, p);
2048 @category{Package graphs}
2049 @category{Package graphs - properties}
2053 @deffn {関数} planar_embedding (@var{gr})
2055 @var{gr}の平面埋め込みでのfacial walkのリストを返します。
2056 もし @var{gr}が平面グラフでないなら @code{false}を返します。
2058 グラフ @var{gr}は2連結でなければいけません。
2060 使われるアルゴリズムはDemoucronのアルゴリズムです。
2066 @c planar_embedding(grid_graph(3,3));
2069 (%i1) load ("graphs")$
2070 (%i2) planar_embedding(grid_graph(3,3));
2071 (%o2) [[3, 6, 7, 8, 5, 2, 1, 0], [4, 3, 0, 1], [3, 4, 7, 6],
2072 [8, 7, 4, 5], [1, 2, 5, 4]]
2076 @category{Package graphs}
2077 @category{Package graphs - properties}
2081 @deffn {関数} print_graph (@var{gr})
2082 グラフ @var{gr}についてのある情報を印字します。
2087 @c c5 : cycle_graph(5)$
2089 @c dc5 : cycle_digraph(5)$
2090 @c print_graph(dc5)$
2091 @c out_neighbors(0, dc5);
2094 (%i1) load ("graphs")$
2095 (%i2) c5 : cycle_graph(5)$
2096 (%i3) print_graph(c5)$
2097 Graph on 5 vertices with 5 edges.
2104 (%i4) dc5 : cycle_digraph(5)$
2105 (%i5) print_graph(dc5)$
2106 Digraph on 5 vertices with 5 arcs.
2113 (%i6) out_neighbors(0, dc5);
2118 @category{Package graphs}
2122 @deffn {関数} radius (@var{gr})
2123 グラフ @var{gr}の半径を返します。
2128 @c radius(dodecahedron_graph());
2131 (%i1) load ("graphs")$
2132 (%i2) radius(dodecahedron_graph());
2137 @category{Package graphs}
2138 @category{Package graphs - properties}
2142 @deffn {関数} set_edge_weight (@var{e}, @var{w}, @var{gr})
2143 グラフ @var{gr}の辺 @var{e}に重み @var{w}を割り当てます。
2148 @c g : create_graph([1, 2], [[[1,2], 1.2]])$
2149 @c get_edge_weight([1,2], g);
2150 @c set_edge_weight([1,2], 2.1, g);
2151 @c get_edge_weight([1,2], g);
2154 (%i1) load ("graphs")$
2155 (%i2) g : create_graph([1, 2], [[[1,2], 1.2]])$
2156 (%i3) get_edge_weight([1,2], g);
2158 (%i4) set_edge_weight([1,2], 2.1, g);
2160 (%i5) get_edge_weight([1,2], g);
2165 @category{Package graphs}
2166 @category{Package graphs - properties}
2170 @deffn {関数} set_vertex_label (@var{v}, @var{l}, @var{gr})
2171 グラフ @var{gr}の頂点 @var{v}にラベル @var{l}を割り当てます。
2177 @c g : create_graph([[1, "One"], [2, "Two"]], [[1,2]])$
2178 @c get_vertex_label(1, g);
2179 @c set_vertex_label(1, "oNE", g);
2180 @c get_vertex_label(1, g);
2183 (%i1) load ("graphs")$
2184 (%i2) g : create_graph([[1, "One"], [2, "Two"]], [[1,2]])$
2185 (%i3) get_vertex_label(1, g);
2187 (%i4) set_vertex_label(1, "oNE", g);
2189 (%i5) get_vertex_label(1, g);
2194 @category{Package graphs}
2195 @category{Package graphs - properties}
2199 @deffn {関数} shortest_path (@var{u}, @var{v}, @var{gr})
2200 グラフ @var{gr}の @var{u}から @var{v}までの最短経路を返します。
2205 @c d : dodecahedron_graph()$
2206 @c path : shortest_path(0, 7, d);
2207 @c draw_graph(d, show_edges=vertices_to_path(path))$
2210 (%i1) load ("graphs")$
2211 (%i2) d : dodecahedron_graph()$
2212 (%i3) path : shortest_path(0, 7, d);
2213 (%o3) [0, 1, 19, 13, 7]
2214 (%i4) draw_graph(d, show_edges=vertices_to_path(path))$
2218 @category{Package graphs}
2219 @category{Package graphs - properties}
2224 @image{@value{figuresfolder}/graphs08,6cm}
2227 @deffn {関数} shortest_weighted_path (@var{u}, @var{v}, @var{gr})
2228 グラフ @var{gr}の @var{u}から @var{v}までの最短重み付き経路とその長さを返します。
2230 重み付き経路の長さは経路内の辺の辺重みの和です。
2231 もし辺に重みがないなら、辺はデフォルト重み1を持ちます。
2237 @c g: petersen_graph(20, 2)$
2238 @c for e in edges(g) do set_edge_weight(e, random(1.0), g)$
2239 @c shortest_weighted_path(0, 10, g);
2242 (%i1) load ("graphs")$
2243 (%i2) g: petersen_graph(20, 2)$
2244 (%i3) for e in edges(g) do set_edge_weight(e, random(1.0), g)$
2245 (%i4) shortest_weighted_path(0, 10, g);
2246 (%o4) [2.575143920268482, [0, 20, 38, 36, 34, 32, 30, 10]]
2250 @category{Package graphs}
2251 @category{Package graphs - properties}
2255 @deffn {関数} strong_components (@var{gr})
2256 有向グラフ @var{gr}の強成分を返します。
2261 @c t : random_tournament(4)$
2262 @c strong_components(t);
2263 @c vertex_out_degree(3, t);
2266 (%i1) load ("graphs")$
2267 (%i2) t : random_tournament(4)$
2268 (%i3) strong_components(t);
2269 (%o3) [[1], [0], [2], [3]]
2270 (%i4) vertex_out_degree(3, t);
2275 @category{Package graphs}
2276 @category{Package graphs - properties}
2280 @deffn {関数} topological_sort (@var{dag})
2282 Returns a topological sorting of the vertices of a directed graph
2283 有向グラフ @var{dag}の頂点のトポロジカルソートを返します。
2284 もし @var{dag}が有向無閉路グラフなら空のリストを返します。
2292 @c [1,2], [2,5], [5,3],
2293 @c [5,4], [3,4], [1,3]
2296 @c topological_sort(g);
2299 (%i1) load ("graphs")$
2300 (%i2) g:create_graph(
2303 [1,2], [2,5], [5,3],
2307 (%i3) topological_sort(g);
2308 (%o3) [1, 2, 5, 3, 4]
2312 @category{Package graphs}
2313 @category{Package graphs - properties}
2317 @deffn {関数} vertex_connectivity (@var{g})
2318 グラフ @var{g}の頂点連結性を返します。
2320 @code{min_vertex_cut}も参照してください。
2323 @category{Package graphs}
2324 @category{Package graphs - properties}
2328 @deffn {関数} vertex_degree (@var{v}, @var{gr})
2329 グラフ @var{gr}の頂点 @var{v}の次数を返します。
2332 @category{Package graphs}
2333 @category{Package graphs - properties}
2337 @deffn {関数} vertex_distance (@var{u}, @var{v}, @var{gr})
2338 (有向)グラフ @var{gr}の @var{u}と @var{v}の間の最短経路の長さを返します。
2343 @c d : dodecahedron_graph()$
2344 @c vertex_distance(0, 7, d);
2345 @c shortest_path(0, 7, d);
2348 (%i1) load ("graphs")$
2349 (%i2) d : dodecahedron_graph()$
2350 (%i3) vertex_distance(0, 7, d);
2352 (%i4) shortest_path(0, 7, d);
2353 (%o4) [0, 1, 19, 13, 7]
2357 @category{Package graphs}
2358 @category{Package graphs - properties}
2362 @deffn {関数} vertex_eccentricity (@var{v}, @var{gr})
2364 グラフ @var{gr}の頂点 @var{v}の離心率を返します。
2369 @c g:cycle_graph(7)$
2370 @c vertex_eccentricity(0, g);
2373 (%i1) load ("graphs")$
2374 (%i2) g:cycle_graph(7)$
2375 (%i3) vertex_eccentricity(0, g);
2380 @category{Package graphs}
2381 @category{Package graphs - properties}
2385 @deffn {関数} vertex_in_degree (@var{v}, @var{gr})
2386 有向グラフ @var{gr}の頂点 @var{v}の内次数を返します。
2391 @c p5 : path_digraph(5)$
2393 @c vertex_in_degree(4, p5);
2394 @c in_neighbors(4, p5);
2397 (%i1) load ("graphs")$
2398 (%i2) p5 : path_digraph(5)$
2399 (%i3) print_graph(p5)$
2400 Digraph on 5 vertices with 4 arcs.
2407 (%i4) vertex_in_degree(4, p5);
2409 (%i5) in_neighbors(4, p5);
2414 @category{Package graphs}
2415 @category{Package graphs - properties}
2419 @deffn {関数} vertex_out_degree (@var{v}, @var{gr})
2420 有向グラフ @var{gr}の頂点 @var{v}の外次数を返します。
2425 @c t : random_tournament(10)$
2426 @c vertex_out_degree(0, t);
2427 @c out_neighbors(0, t);
2430 (%i1) load ("graphs")$
2431 (%i2) t : random_tournament(10)$
2432 (%i3) vertex_out_degree(0, t);
2434 (%i4) out_neighbors(0, t);
2439 @category{Package graphs}
2440 @category{Package graphs - properties}
2444 @deffn {関数} vertices (@var{gr})
2445 グラフ @var{gr}の頂点のリストを返します。
2450 @c vertices(complete_graph(4));
2453 (%i1) load ("graphs")$
2454 (%i2) vertices(complete_graph(4));
2459 @category{Package graphs}
2460 @category{Package graphs - properties}
2464 @deffn {関数} vertex_coloring (@var{gr})
2465 グラフ @var{gr}の頂点の最適色付けを返します。
2467 関数は、彩色数と @var{gr}の頂点の色付けを表すリストを返します。
2472 @c p:petersen_graph()$
2473 @c vertex_coloring(p);
2476 (%i1) load ("graphs")$
2477 (%i2) p:petersen_graph()$
2478 (%i3) vertex_coloring(p);
2479 (%o3) [3, [[0, 2], [1, 3], [2, 2], [3, 3], [4, 1], [5, 3],
2480 [6, 1], [7, 1], [8, 2], [9, 2]]]
2484 @category{Package graphs}
2485 @category{Package graphs - properties}
2489 @deffn {関数} wiener_index (@var{gr})
2490 グラフ @var{gr}のWiener指数を返します。
2495 @c wiener_index(dodecahedron_graph());
2498 (%i2) wiener_index(dodecahedron_graph());
2503 @category{Package graphs}
2504 @category{Package graphs - properties}
2508 @subsection Modifying graphs
2510 @deffn {関数} add_edge (@var{e}, @var{gr})
2511 辺 @var{e}をグラフ @var{gr}に加えます。
2516 @c p : path_graph(4)$
2518 @c add_edge([0,3], p);
2522 (%i1) load ("graphs")$
2523 (%i2) p : path_graph(4)$
2524 (%i3) neighbors(0, p);
2526 (%i4) add_edge([0,3], p);
2528 (%i5) neighbors(0, p);
2533 @category{Package graphs}
2534 @category{Package graphs - modifications}
2538 @deffn {関数} add_edges (@var{e_list}, @var{gr})
2539 リスト @var{e_list}の中の辺すべてをグラフ @var{gr}に加えます。
2544 @c g : empty_graph(3)$
2545 @c add_edges([[0,1],[1,2]], g)$
2549 (%i1) load ("graphs")$
2550 (%i2) g : empty_graph(3)$
2551 (%i3) add_edges([[0,1],[1,2]], g)$
2552 (%i4) print_graph(g)$
2553 Graph on 3 vertices with 2 edges.
2561 @category{Package graphs}
2562 @category{Package graphs - modifications}
2566 @deffn {関数} add_vertex (@var{v}, @var{gr})
2567 頂点 @var{v}をグラフ @var{gr}に加えます。
2572 @c g : path_graph(2)$
2573 @c add_vertex(2, g)$
2577 (%i1) load ("graphs")$
2578 (%i2) g : path_graph(2)$
2579 (%i3) add_vertex(2, g)$
2580 (%i4) print_graph(g)$
2581 Graph on 3 vertices with 1 edges.
2589 @category{Package graphs}
2590 @category{Package graphs - modifications}
2594 @deffn {関数} add_vertices (@var{v_list}, @var{gr})
2595 リスト @var{v_list}の中の頂点すべてをグラフ @var{gr}に加えます。
2598 @category{Package graphs}
2599 @category{Package graphs - modifications}
2603 @deffn {関数} connect_vertices (@var{v_list}, @var{u_list}, @var{gr})
2605 リスト @var{v_list}内の頂点すべてを
2606 リスト @var{u_list}内の頂点に連結します。
2609 @var{v_list}と @var{u_list}は1つの頂点か、頂点のリストを取り得ます。
2614 @c g : empty_graph(4)$
2615 @c connect_vertices(0, [1,2,3], g)$
2619 (%i1) load ("graphs")$
2620 (%i2) g : empty_graph(4)$
2621 (%i3) connect_vertices(0, [1,2,3], g)$
2622 (%i4) print_graph(g)$
2623 Graph on 4 vertices with 3 edges.
2632 @category{Package graphs}
2633 @category{Package graphs - modifications}
2637 @deffn {関数} contract_edge (@var{e}, @var{gr})
2638 グラフ @var{gr}の辺 @var{e}を縮約します。
2644 @c 8, [[0,3],[1,3],[2,3],[3,4],[4,5],[4,6],[4,7]])$
2646 @c contract_edge([3,4], g)$
2650 (%i1) load ("graphs")$
2651 (%i2) g: create_graph(
2652 8, [[0,3],[1,3],[2,3],[3,4],[4,5],[4,6],[4,7]])$
2653 (%i3) print_graph(g)$
2654 Graph on 8 vertices with 7 edges.
2664 (%i4) contract_edge([3,4], g)$
2665 (%i5) print_graph(g)$
2666 Graph on 7 vertices with 6 edges.
2678 @category{Package graphs}
2679 @category{Package graphs - modifications}
2683 @deffn {関数} remove_edge (@var{e}, @var{gr})
2684 グラフ @var{gr}から辺 @var{e}を削除します。
2689 @c c3 : cycle_graph(3)$
2690 @c remove_edge([0,1], c3)$
2694 (%i1) load ("graphs")$
2695 (%i2) c3 : cycle_graph(3)$
2696 (%i3) remove_edge([0,1], c3)$
2697 (%i4) print_graph(c3)$
2698 Graph on 3 vertices with 2 edges.
2706 @category{Package graphs}
2707 @category{Package graphs - modifications}
2711 @deffn {関数} remove_vertex (@var{v}, @var{gr})
2712 グラフ @var{gr}から頂点 @var{v}を削除します。
2715 @category{Package graphs}
2719 @subsection Reading and writing to files
2721 @deffn {関数} dimacs_export (@var{gr}, @var{fl})
2722 @deffnx {関数} dimacs_export (@var{gr}, @var{fl}, @var{comment1}, ..., @var{commentn})
2724 グラフをファイル @var{fl}にDIMACSフォーマットでエクスポートします。
2725 オプションのコメントはファイルの頭に加えられます。
2728 @category{Package graphs}
2729 @category{Package graphs - io}
2733 @deffn {関数} dimacs_import (@var{fl})
2735 DIMACSフォーマットのファイル @var{fl}からグラフを返します。
2738 @category{Package graphs}
2739 @category{Package graphs - io}
2743 @deffn {関数} graph6_decode (@var{str})
2745 文字列 @var{str}にgraph6フォーマットで符号化されたグラフを返します。
2748 @category{Package graphs}
2749 @category{Package graphs - io}
2753 @deffn {関数} graph6_encode (@var{gr})
2755 グラフ @var{gr}をgraph6フォーマットに符号化した文字列を返します。
2758 @category{Package graphs}
2759 @category{Package graphs - io}
2763 @deffn {関数} graph6_export (@var{gr_list}, @var{fl})
2765 リスト @var{gr_list}内のグラフをファイル @var{fl}に
2766 graph6フォーマットでエクスポートします。
2770 @category{Package graphs}
2771 @category{Package graphs - io}
2775 @deffn {関数} graph6_import (@var{fl})
2777 graph6フォーマットのファイル @var{fl}からグラフのリストを返します。
2780 @category{Package graphs}
2781 @category{Package graphs - io}
2785 @deffn {関数} sparse6_decode (@var{str})
2787 文字列 @var{str}にsparse6フォーマットで符号化されたグラフを返します。
2790 @category{Package graphs}
2791 @category{Package graphs - io}
2795 @deffn {関数} sparse6_encode (@var{gr})
2797 グラフ @var{gr}をsparse6フォーマットに符号化した文字列を返します。
2800 @category{Package graphs}
2801 @category{Package graphs - io}
2805 @deffn {関数} sparse6_export (@var{gr_list}, @var{fl})
2807 リスト @var{gr_list}内のグラフを
2808 ファイル @var{fl}にsparse6フォーマットでエクスポートします。
2811 @category{Package graphs}
2812 @category{Package graphs - io}
2816 @deffn {関数} sparse6_import (@var{fl})
2818 sparse6フォーマットのファイル @var{fl}からグラフのリストを返します。
2822 @category{Package graphs}
2823 @category{Package graphs - io}
2827 @subsection Visualization
2829 @deffn {関数} draw_graph (@var{graph})
2830 @deffnx {関数} draw_graph (@var{graph}, @var{option1}, ..., @var{optionk})
2831 @code{draw}パッケージを使ってグラフを描画します。
2833 頂点を配置するのに使われるアルゴリズムは
2834 オプション引数 @var{program}で指定されます。
2835 デフォルト値は @code{program=spring_embedding}です。
2837 頂点を配置するのにgraphvizプログラムも使うことができますが、
2838 graphvizを別途インストールしなければいけません。
2844 @c g:grid_graph(10,10)$
2845 @c m:max_matching(g)$
2847 @c spring_embedding_depth=100,
2848 @c show_edges=m, edge_type=dots,
2852 (%i1) load ("graphs")$
2853 (%i2) g:grid_graph(10,10)$
2854 (%i3) m:max_matching(g)$
2856 spring_embedding_depth=100,
2857 show_edges=m, edge_type=dots,
2862 @image{@value{figuresfolder}/graphs09,6cm}
2869 @c g:create_graph(16,
2871 @c [0,1],[1,3],[2,3],[0,2],[3,4],[2,4],
2872 @c [5,6],[6,4],[4,7],[6,7],[7,8],[7,10],[7,11],
2873 @c [8,10],[11,10],[8,9],[11,12],[9,15],[12,13],
2874 @c [10,14],[15,14],[13,14]
2876 @c t:minimum_spanning_tree(g)$
2879 @c show_edges=edges(t),
2880 @c show_edge_width=4,
2881 @c show_edge_color=green,
2882 @c vertex_type=filled_square,
2887 (%i1) load ("graphs")$
2888 (%i2) g:create_graph(16,
2890 [0,1],[1,3],[2,3],[0,2],[3,4],[2,4],
2891 [5,6],[6,4],[4,7],[6,7],[7,8],[7,10],[7,11],
2892 [8,10],[11,10],[8,9],[11,12],[9,15],[12,13],
2893 [10,14],[15,14],[13,14]
2895 (%i3) t:minimum_spanning_tree(g)$
2898 show_edges=edges(t),
2900 show_edge_color=green,
2901 vertex_type=filled_square,
2907 @image{@value{figuresfolder}/graphs10,6cm}
2914 @c g:create_graph(16,
2916 @c [0,1],[1,3],[2,3],[0,2],[3,4],[2,4],
2917 @c [5,6],[6,4],[4,7],[6,7],[7,8],[7,10],[7,11],
2918 @c [8,10],[11,10],[8,9],[11,12],[9,15],[12,13],
2919 @c [10,14],[15,14],[13,14]
2921 @c mi : max_independent_set(g)$
2924 @c show_vertices=mi,
2925 @c show_vertex_type=filled_up_triangle,
2926 @c show_vertex_size=2,
2934 (%i1) load ("graphs")$
2935 (%i2) g:create_graph(16,
2937 [0,1],[1,3],[2,3],[0,2],[3,4],[2,4],
2938 [5,6],[6,4],[4,7],[6,7],[7,8],[7,10],[7,11],
2939 [8,10],[11,10],[8,9],[11,12],[9,15],[12,13],
2940 [10,14],[15,14],[13,14]
2942 (%i3) mi : max_independent_set(g)$
2946 show_vertex_type=filled_up_triangle,
2956 @image{@value{figuresfolder}/graphs11,6cm}
2963 @c net : create_graph(
2966 @c [[0,1], 3], [[0,2], 2],
2967 @c [[1,3], 1], [[1,4], 3],
2968 @c [[2,3], 2], [[2,4], 2],
2969 @c [[4,5], 2], [[3,5], 2]
2975 @c show_weight=true,
2977 @c show_vertices=[0,5],
2978 @c show_vertex_type=filled_square,
2981 @c edge_color="dark-green",
2986 (%i1) load ("graphs")$
2987 (%i2) net : create_graph(
2990 [[0,1], 3], [[0,2], 2],
2991 [[1,3], 1], [[1,4], 3],
2992 [[2,3], 2], [[2,4], 2],
2993 [[4,5], 2], [[3,5], 2]
3001 show_vertices=[0,5],
3002 show_vertex_type=filled_square,
3005 edge_color="dark-green",
3011 @image{@value{figuresfolder}/graphs12,6cm}
3018 @c g: petersen_graph(20, 2);
3019 @c draw_graph(g, redraw=true, program=planar_embedding);
3022 (%i1) load("graphs")$
3023 (%i2) g: petersen_graph(20, 2);
3025 (%i3) draw_graph(g, redraw=true, program=planar_embedding);
3030 @image{@value{figuresfolder}/graphs14,6cm}
3037 @c t: tutte_graph();
3038 @c draw_graph(t, redraw=true,
3039 @c fixed_vertices=[1,2,3,4,5,6,7,8,9]);
3042 (%i1) load("graphs")$
3043 (%i2) t: tutte_graph();
3045 (%i3) draw_graph(t, redraw=true,
3046 fixed_vertices=[1,2,3,4,5,6,7,8,9]);
3051 @image{@value{figuresfolder}/graphs15,6cm}
3055 @category{Package graphs}
3059 @defvr {オプション変数} draw_graph_program
3060 デフォルト値: @var{spring_embedding}
3062 頂点を配置するのに使われるプログラムのデフォルト値は
3063 @code{draw_graph}プログラムです。
3066 @category{Package graphs}
3067 @category{Package graphs - draw_graphs options}
3071 @defvr {draw_graphオプション} show_id
3074 もし @var{true}なら頂点のidが表示されます。
3077 @category{Package graphs}
3078 @category{Package graphs - draw_graphs options}
3082 @defvr {draw_graphオプション} show_label
3085 もし @var{true}なら頂点のラベルが表示されます。
3088 @category{Package graphs}
3089 @category{Package graphs - draw_graphs options}
3093 @defvr {draw_graphオプション} label_alignment
3094 デフォルト値: @var{center}
3096 頂点のラベル/idをいかに整列させるか決めます。
3097 @code{left}, @code{center}, @code{right}であり得ます。
3100 @category{Package graphs}
3101 @category{Package graphs - draw_graphs options}
3105 @defvr {draw_graphオプション} show_weight
3108 もし @var{true}なら辺の重みを表示します。
3111 @category{Package graphs}
3112 @category{Package graphs - draw_graphs options}
3116 @defvr {draw_graphオプション} vertex_type
3117 デフォルト値: @var{circle}
3121 @code{draw}パッケージの @var{point_type}オプションを参照してください。
3124 @category{Package graphs}
3125 @category{Package graphs - draw_graphs options}
3129 @defvr {draw_graphオプション} vertex_size
3133 @category{Package graphs}
3134 @category{Package graphs - draw_graphs options}
3138 @defvr {draw_graphオプション} vertex_color
3142 @category{Package graphs}
3143 @category{Package graphs - draw_graphs options}
3147 @defvr {draw_graphオプション} show_vertices
3153 @category{Package graphs}
3154 @category{Package graphs - draw_graphs options}
3158 @defvr {draw_graphオプション} show_vertex_type
3160 @var{show_vertices}で指定された頂点をいかに表示するか定義します。
3162 @code{draw}パッケージの @var{point_type}オプションを参照してください。
3165 @category{Package graphs}
3166 @category{Package graphs - draw_graphs options}
3170 @defvr {draw_graphオプション} show_vertex_size
3171 @var{show_vertices}内の頂点のサイズ
3174 @category{Package graphs}
3175 @category{Package graphs - draw_graphs options}
3179 @defvr {draw_graphオプション} show_vertex_color
3180 @var{show_vertices}リスト内の頂点を表示するのに使う色。
3183 @category{Package graphs}
3184 @category{Package graphs - draw_graphs options}
3188 @defvr {draw_graphオプション} vertex_partition
3191 グラフの頂点の分割 @code{[[v1,v2,...],...,[vk,...,vn]]}
3192 分割内のそれぞれのリストの頂点は異なる色で描画されます。
3195 @category{Package graphs}
3196 @category{Package graphs - draw_graphs options}
3200 @defvr {draw_graphオプション} vertex_coloring
3203 @var{vertex_coloring}が返すようなフォーマットで指定されなければいけません。
3206 @category{Package graphs}
3207 @category{Package graphs - draw_graphs options}
3211 @defvr {draw_graphオプション} edge_color
3215 @category{Package graphs}
3216 @category{Package graphs - draw_graphs options}
3220 @defvr {draw_graphオプション} edge_width
3224 @category{Package graphs}
3225 @category{Package graphs - draw_graphs options}
3229 @defvr {draw_graphオプション} edge_type
3231 @code{draw}パッケージの@var{line_type}オプションを参照してください。
3234 @category{Package graphs}
3235 @category{Package graphs - draw_graphs options}
3239 @defvr {draw_graphオプション} show_edges
3240 異なる色を使ってリスト @var{e_list}内で指定された辺を表示する。
3243 @category{Package graphs}
3244 @category{Package graphs - draw_graphs options}
3248 @defvr {draw_graphオプション} show_edge_color
3249 @var{show_edges}リスト内の辺を表示するのに使う色。
3252 @category{Package graphs}
3253 @category{Package graphs - draw_graphs options}
3257 @defvr {draw_graphオプション} show_edge_width
3258 @var{show_edges}内の辺の幅。
3261 @category{Package graphs}
3262 @category{Package graphs - draw_graphs options}
3266 @defvr {draw_graphオプション} show_edge_type
3267 @var{show_edges}内の辺を以下に表示するかを定義します。
3268 @code{draw}パッケージの@var{line_type}オプションを参照してください。
3271 @category{Package graphs}
3272 @category{Package graphs - draw_graphs options}
3276 @defvr {draw_graphオプション} edge_partition
3277 グラフの辺の分割 @code{[[e1,e2,...],...,[ek,...,em]]}
3278 分割内のそれぞれのリストの辺は異なる色を使って描画されます。
3281 @category{Package graphs}
3282 @category{Package graphs - draw_graphs options}
3286 @defvr {draw_graphオプション} edge_coloring
3289 関数 @var{edge_coloring}が返すようなフォーマットで指定しなければいけません。
3292 @category{Package graphs}
3293 @category{Package graphs - draw_graphs options}
3297 @defvr {draw_graphオプション} redraw
3301 たとえ位置がグラフの以前の描画から保存されていても頂点位置が再計算されます。
3304 @category{Package graphs}
3305 @category{Package graphs - draw_graphs options}
3309 @defvr {draw_graphオプション} head_angle
3312 (有向グラフの)弧に表示される矢印の角度。
3315 @category{Package graphs}
3316 @category{Package graphs - draw_graphs options}
3320 @defvr {draw_graphオプション} head_length
3323 (有向グラフの)弧に表示される矢印の長さ。
3326 @category{Package graphs}
3327 @category{Package graphs - draw_graphs options}
3331 @defvr {draw_graphオプション} spring_embedding_depth
3334 バネ埋め込みグラフ描画アルゴリズムでの繰り返し回数
3337 @category{Package graphs}
3338 @category{Package graphs - draw_graphs options}
3342 @defvr {draw_graphオプション} terminal
3344 (@code{draw}パッケージの @var{terminal}オプションを参照してください。)
3347 @category{Package graphs}
3348 @category{Package graphs - draw_graphs options}
3352 @defvr {draw_graphオプション} file_name
3353 端末がスクリーンでないなら、描画のファイル名。
3356 @category{Package graphs}
3357 @category{Package graphs - draw_graphs options}
3361 @defvr {draw_graphオプション} program
3362 グラフの頂点を配置するのに使われるプログラムを定義します。
3363 graphvizプログラム (dot, neato, twopi, circ, fdp)の1つ,
3364 @var{circular}, @var{spring_embedding}, @var{planar_embedding}を取り得ます。
3365 2連結平面グラフでは @var{planar_embedding}だけが利用可能です。
3366 @code{program=spring_embedding}の時、
3367 固定位置の頂点の集合が @var{fixed_vertices}オプションで指定可能です。
3370 @category{Package graphs}
3371 @category{Package graphs - draw_graphs options}
3375 @defvr {draw_graphオプション} fixed_vertices
3376 正多角形沿いに固定された位置を持つ頂点のリストを指定します。
3377 @code{program=spring_embedding}の時、使うことができます。
3380 @category{Package graphs}
3381 @category{Package graphs - draw_graphs options}
3385 @deffn {関数} vertices_to_path (@var{v_list})
3386 頂点のリスト @var{v_list}を
3387 @var{v_list}で定義された経路の辺のリストに変換します。
3390 @category{Package graphs}
3394 @deffn {関数} vertices_to_cycle (@var{v_list})
3395 頂点のリスト @var{v_list}を
3396 @var{v_list}で定義された閉路の辺のリストに変換します。
3399 @category{Package graphs}