diff --git a/doc/attr.xml b/doc/attr.xml index 1dd3bb640..23f846615 100644 --- a/doc/attr.xml +++ b/doc/attr.xml @@ -1117,6 +1117,7 @@ gap> DigraphUndirectedGirth(D); <#GAPDoc Label="ArticulationPoints"> + A list of vertices. A connected digraph is biconnected if it is still connected (in the @@ -1143,6 +1144,9 @@ gap> DigraphUndirectedGirth(D); with articulation points, but no bridges.

+ is a synonym for . +

+ See also and . DigraphWelshPowellOrder(Digraph([[4], [9], [9], [], <#/GAPDoc> +<#GAPDoc Label="DigraphSmallestLastOrder"> + + + A list of vertices. + + DigraphSmallestLastOrder returns a list order containing each + of the vertices of digraph in smallest-last order, defined as + follows:

+ + Let D_n be digraph. For i = n, n-1, \ldots, 1, the + vertex order[i] is a vertex of minimum degree in D_i, and + D_{i-1} is the subdigraph of D_i induced by removing + order[i]. The degree of a vertex here is the sum of the number of + out- and in-neighbours.

+ + The result is not unique in general, since there may be several vertices + of minimum degree at any step; DigraphSmallestLastOrder tiebreaks + by taking the smallest such vertex. + D1 := Digraph([[2], [1, 3], [2]]);; +gap> DigraphSmallestLastOrder(D1); +[ 3, 2, 1 ] +gap> D2 := CompleteDigraph(3);; +gap> DigraphSmallestLastOrder(D2); +[ 3, 2, 1 ] +]]> + + +<#/GAPDoc> + <#GAPDoc Label="DigraphEmbedding"> diff --git a/doc/oper.xml b/doc/oper.xml index 9213ec1b4..c7cf5d218 100644 --- a/doc/oper.xml +++ b/doc/oper.xml @@ -1957,6 +1957,7 @@ rec( idom := [ 2, fail, 2, 2, 2 ], preorder := [ 2, 1, 3, 4, 5 ] ) <#GAPDoc Label="IsDigraphOutDominatingSet"> + true or false. @@ -1973,7 +1974,10 @@ rec( idom := [ 2, fail, 2, 2, 2 ], preorder := [ 2, 1, 3, 4, 5 ] ) either in S or an out-neighbour of a vertex in S. An in-dominating set of digraph is a subset S of vertices of digraph such that every vertex of digraph is - either in S or an in-neighbour of a vertex in S. + either in S or an in-neighbour of a vertex in S.

+ + is a synonym for + . D := Digraph([[2, 4], [3], [1, 5], [3], [4]]);; @@ -2290,6 +2294,7 @@ gap> DigraphDijkstra(D, 1, 2); <#GAPDoc Label="ModularProduct"> + A digraph. If D1 and D2 are digraphs without multiple edges, then @@ -2313,7 +2318,10 @@ gap> DigraphDijkstra(D, 1, 2); Notably, the complete (with loops) subdigraphs of MPD are - precisely the partial isomorphisms from D1 to D2. + precisely the partial isomorphisms from D1 to D2.

+ + is a synonym for + . ModularProduct(Digraph([[1], [1, 2]]), Digraph([[], [2]])); @@ -2333,6 +2341,7 @@ gap> ModularProduct(NullDigraph(0), CompleteDigraph(10)); <#GAPDoc Label="StrongProduct"> + A digraph. If D1 and D2 are digraphs without multiple edges, @@ -2360,7 +2369,10 @@ gap> ModularProduct(NullDigraph(0), CompleteDigraph(10)); The SPD of two paths of lengths m and n is also the king's graph - for an m by n board. + for an m by n board.

+ + is a synonym for + . D1 := Digraph([[2], [1, 3, 4], [2, 5], [2, 5], [3, 4]]); @@ -2380,6 +2392,7 @@ gap> StrongProduct(DigraphSymmetricClosure(ChainDigraph(3)), <#GAPDoc Label="ConormalProduct"> + A digraph. If D1 and D2 are digraphs without multiple edges, @@ -2398,7 +2411,10 @@ gap> StrongProduct(DigraphSymmetricClosure(ChainDigraph(3)), There is an edge from b to d in D2. - +

+ + is a synonym for + . ConormalProduct(DigraphSymmetricClosure(CycleDigraph(7)), @@ -2414,6 +2430,7 @@ gap> ConormalProduct(NullDigraph(0), CompleteDigraph(10)); <#GAPDoc Label="HomomorphicProduct"> + A digraph. If D1 and D2 are digraphs without multiple edges, @@ -2433,7 +2450,10 @@ gap> ConormalProduct(NullDigraph(0), CompleteDigraph(10)); There is an edge from a to c in D1 and no edge from b to d in D2. - +

+ + is a synonym for + . HomomorphicProduct(PetersenGraph(), @@ -2476,6 +2496,7 @@ gap> OutNeighbours(D1); <#GAPDoc Label="LexicographicProduct"> + A digraph. If D1 and D2 are digraphs without multiple edges, @@ -2495,7 +2516,10 @@ gap> OutNeighbours(D1); The vertices a and c of D1 are equal and there is an edge from b to d in D2. - +

+ + is a synonym for + . LexicographicProduct(DigraphSymmetricClosure(CycleDigraph(3)), diff --git a/doc/prop.xml b/doc/prop.xml index 5c293f4a3..0eea03180 100644 --- a/doc/prop.xml +++ b/doc/prop.xml @@ -1665,11 +1665,14 @@ false]]> <#GAPDoc Label="Is2EdgeTransitive"> + true or false. If digraph is a digraph without multiple edges, then Is2EdgeTransitive returns true if digraph is 2-edge transitive, and false - otherwise. If digraph has multiple edges, then Is2EdgeTransitive returns an error. + otherwise. If digraph has multiple edges, then Is2EdgeTransitive returns an error.

+ + is a synonym for .

A digraph is 2-edge transitive if its automorphism group acts transitively on 2-edges via the action diff --git a/doc/weights.xml b/doc/weights.xml index cc569a088..be0fda438 100644 --- a/doc/weights.xml +++ b/doc/weights.xml @@ -70,6 +70,36 @@ gap> EdgeWeights(g); <#/GAPDoc> +<#GAPDoc Label="UnitEdgeWeightedDigraph"> + + + A digraph + + + If digraph is immutable, UnitEdgeWeightedDigraph returns + an immutable edge-weighted copy of digraph, with all edge weights + set to 1. If digraph is mutable, the returned digraph will be + mutable, but will not have edge weights.

+ + See . + + D := Digraph([[2], [1, 3], [1]]); + +gap> D1 := UnitEdgeWeightedDigraph(D); + +gap> EdgeWeights(D1); +[ [ 1 ], [ 1, 1 ], [ 1 ] ] +gap> D2 := Digraph(IsMutableDigraph, [[2], [1, 3], [1]]);; +gap> UnitEdgeWeightedDigraph(D2); + +gap> HasEdgeWeights(D2); +false +]]> + + +<#/GAPDoc> + <#GAPDoc Label="EdgeWeightedDigraphTotalWeight"> @@ -91,6 +121,25 @@ gap> EdgeWeightedDigraphTotalWeight(D); <#/GAPDoc> +<#GAPDoc Label="IsNegativeEdgeWeightedDigraph"> + + + A boolean. + + If digraph has edge weights, then this returns true if + at least one edge has negative weight, and false otherwise. If + digraph has no edge weights, then an error is raised. + D := EdgeWeightedDigraph([[2], [1]], [[5], [10]]);; +gap> IsNegativeEdgeWeightedDigraph(D); +false +gap> D := EdgeWeightedDigraph([[2], [1]], [[-5], [10]]);; +gap> IsNegativeEdgeWeightedDigraph(D); +true]]> + + +<#/GAPDoc> + <#GAPDoc Label="EdgeWeightedDigraphMinimumSpanningTree"> diff --git a/doc/z-chap5.xml b/doc/z-chap5.xml index f1da97657..bf322b769 100644 --- a/doc/z-chap5.xml +++ b/doc/z-chap5.xml @@ -28,7 +28,9 @@

Edge Weights <#Include Label="EdgeWeights"> <#Include Label="EdgeWeightedDigraph"> + <#Include Label="UnitEdgeWeightedDigraph"> <#Include Label="EdgeWeightedDigraphTotalWeight"> + <#Include Label="IsNegativeEdgeWeightedDigraph"> <#Include Label="EdgeWeightedDigraphMinimumSpanningTree"> <#Include Label="EdgeWeightedDigraphShortestPaths"> <#Include Label="EdgeWeightedDigraphShortestPath"> diff --git a/doc/z-chap6.xml b/doc/z-chap6.xml index f9798b51c..26f5e23bc 100644 --- a/doc/z-chap6.xml +++ b/doc/z-chap6.xml @@ -73,6 +73,7 @@ from} $E_a$ \emph{to} $E_b$. In this case we say that $E_a$ and $E_b$ are <#Include Label="DigraphColouring"> <#Include Label="DigraphGreedyColouring"> <#Include Label="DigraphWelshPowellOrder"> + <#Include Label="DigraphSmallestLastOrder"> <#Include Label="ChromaticNumber"> <#Include Label="DigraphCore"> <#Include Label="LatticeDigraphEmbedding"> diff --git a/gap/grahom.gd b/gap/grahom.gd index b18ecce70..8e970feb7 100644 --- a/gap/grahom.gd +++ b/gap/grahom.gd @@ -42,7 +42,7 @@ DeclareOperation("DigraphGreedyColouring", [IsDigraph, IsHomogeneousList]); DeclareOperation("DigraphGreedyColouringNC", [IsDigraph, IsHomogeneousList]); DeclareAttribute("DigraphWelshPowellOrder", IsDigraph); -DeclareAttribute("DigraphSmallestLastOrder", IsDigraph); # TODO: document +DeclareAttribute("DigraphSmallestLastOrder", IsDigraph); DeclareOperation("IsDigraphEndomorphism", [IsDigraph, IsTransformation]); DeclareOperation("IsDigraphHomomorphism", diff --git a/gap/weights.gd b/gap/weights.gd index 423950b61..77d8823a4 100644 --- a/gap/weights.gd +++ b/gap/weights.gd @@ -14,7 +14,7 @@ DeclareGlobalFunction("EdgeWeightedDigraph"); DeclareProperty("IsNegativeEdgeWeightedDigraph", IsDigraph and HasEdgeWeights); DeclareAttribute("EdgeWeightedDigraphTotalWeight", IsDigraph and HasEdgeWeights); -DeclareAttribute("UnitEdgeWeightedDigraph", IsDigraph); +DeclareOperation("UnitEdgeWeightedDigraph", [IsDigraph]); # 2. Edge Weight Copies DeclareOperation("EdgeWeightsMutableCopy", [IsDigraph and HasEdgeWeights]);