|
|
|
|
SSL chap5.html
Sprache: HTML
|
|
| products/Sources/formale Sprachen/GAP/pkg/digraphs/doc/chap5.html |
 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (Digraphs) - Chapter 5: Attributes and operations</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap5" onload="jscontent()">
<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a> <a href="chap1.html">1</a> <a href="chap2.html">2</a> <a href="chap3.html">3</a> <a href="chap4.html">4</a> <a href="chap5.html">5</a> <a href="chap6.html">6</a> <a href="chap7.html">7</a> <a href="chap8.html">8</a> <a href="chap9.html">9</a> <a href="chapA.html">A</a> <a href="chapB.html">B</a> <a href="chapBib.html">Bib</a> <a href="chapInd.html">Ind</a> </div>
<div class="chlinkprevnexttop"> <a href="chap0.html">[Top of Book]</a> <a href="chap0.html#contents">[Contents]</a> <a href="chap4.html">[Previous Chapter]</a> <a href="chap6.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap5_mj.html">[MathJax on]</a></p>
<p><a id="X8739F6CD78C90B14" name="X8739F6CD78C90B14"></a></p>
<div class="ChapSects"><a href="chap5.html#X8739F6CD78C90B14">5 <span class="Heading">Attributes and operations</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X7E814B6478F7D015">5.1 <span class="Heading">Vertices and edges</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C45F7D878D896AC">5.1-1 DigraphVertices</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C6F19B57CB2E882">5.1-2 DigraphNrVertices</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7D1C6A4D7ECEC317">5.1-3 DigraphEdges</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X85E1CFDD7E164AD0">5.1-4 DigraphNrEdges</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7BD5D255809C859E">5.1-5 DigraphNrAdjacencies</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7E53E728795BB862">5.1-6 DigraphNrAdjacenciesWithoutLoops</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7BDABAF07917462B">5.1-7 DigraphNrLoops</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X85D5E08280914EE4">5.1-8 DigraphSinks</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7F5C6268839BE98C">5.1-9 DigraphSources</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X785C30378064CF47">5.1-10 DigraphTopologicalSort</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7CA91E4B7904F793">5.1-11 DigraphVertexLabel</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7E51F2FE87140B32">5.1-12 DigraphVertexLabels</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X79FAEACC7F438C2F">5.1-13 DigraphEdgeLabel</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C24851087D4A8FB">5.1-14 DigraphEdgeLabels</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7EFAF01B7A155157">5.1-15 DigraphInEdges</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7BECFE6687ECD028">5.1-16 DigraphOutEdges</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7BB8ED88835F07B4">5.1-17 IsDigraphEdge</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X848FED0B7B4ACD1F">5.1-18 IsMatching</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7B7A67277B1C9A02">5.1-19 DigraphMaximalMatching</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X78E9847A858788D1">5.1-20 DigraphMaximumMatching</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X7D7CE8328187D0DF">5.2 <span class="Heading">Neighbours and degree</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7DC2CD70830BEE60">5.2-1 AdjacencyMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X87FA0A727CDB060B">5.2-2 CharacteristicPolynomial</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8507DC4F794780C1">5.2-3 BooleanAdjacencyMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7AFCE34A7A04D5C1">5.2-4 DigraphAdjacencyFunction</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7FDEBF3279759961">5.2-5 DigraphRange</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7E9880767AE68E00">5.2-6 OutNeighbours</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X85C7AA5A81DA6E11">5.2-7 InNeighbours</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7F5ACE807D1BC2E2">5.2-8 OutDegrees</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7ADDFBFD7A365775">5.2-9 InDegrees</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7A09EB648070276D">5.2-10 OutDegreeOfVertex</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X83315B0186850806">5.2-11 OutNeighboursOfVertex</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C9CD0527CB9E6EF">5.2-12 InDegreeOfVertex</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C0DA18B8291F302">5.2-13 InNeighboursOfVertex</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X83271F607BD809CF">5.2-14 DigraphLoops</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7BEAE1C78267F54D">5.2-15 DegreeMatrix</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X865390B08331936B">5.2-16 LaplacianMatrix</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X86424F167BD4F629">5.3 <span class="Heading">Orders</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7DDB33B686B3A2C6">5.3-1 PartialOrderDigraphMeetOfVertices</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X824B9896798530F6">5.3-2 NonUpperSemimodularPair</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X8537F4088400DC48">5.4 <span class="Heading">Reachability and connectivity</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7F16B9EB8398459C">5.4-1 DigraphDiameter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8104A9D37BCD8A05">5.4-2 DigraphShortestDistance</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X81F99BC67E9D050F">5.4-3 DigraphShortestDistances</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8223718079D98A82">5.4-4 DigraphLongestDistanceFromVertex</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7CB7DDCD84621D38">5.4-5 DigraphDistanceSet</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X79A3DA4078CF3C90">5.4-6 DigraphGirth</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8374B7357EC189C1">5.4-7 DigraphOddGirth</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X84688B337BDDBB09">5.4-8 DigraphUndirectedGirth</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X842FAD6A7B835977">5.4-9 DigraphConnectedComponents</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8484EC557810CD31">5.4-10 DigraphConnectedComponent</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X833ECD6B7A84944C">5.4-11 DigraphStronglyConnectedComponents</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7EFCB5017D662254">5.4-12 DigraphStronglyConnectedComponent</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7F1B5A2782F598B1">5.4-13 DigraphBicomponents</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7DDE06E47E605DD7">5.4-14 ArticulationPoints</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X803459AB86AB9BE2">5.4-15 MinimalCyclicEdgeCut</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X84D5A125848BD800">5.4-16 Bridges</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X865590147BD1C507">5.4-17 StrongOrientation</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X853D0B0981A33433">5.4-18 DigraphPeriod</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X864A31A8809F61C2">5.4-19 DigraphFloydWarshall</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7FBAB09E7C0BE5CF">5.4-20 IsReachable</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7ECD22877AEA89CC">5.4-21 IsDigraphPath</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7F255A2A84CB868C">5.4-22 VerticesReachableFrom</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8039170B82A32257">5.4-23 DigraphPath</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X80E9D645843973A6">5.4-24 DigraphShortestPath</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C45396C808308C4">5.4-25 DigraphRandomWalk</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X787459247B2005E6">5.4-26 DigraphAbsorptionProbabilities</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7B0A62CF7F6F23E9">5.4-27 DigraphAbsorptionExpectedSteps</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7FE79CB278CE6991">5.4-28 Dominators</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7D66A0FB7F6100FB">5.4-29 DominatorTree</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C0416FE7A69CA2C">5.4-30 IteratorOfPaths</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7ECD16838704FAAA">5.4-31 DigraphAllSimpleCircuits</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C735C4E86BDD5F6">5.4-32 DigraphLongestSimpleCircuit</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7F9EDAA8854FB538">5.4-33 DigraphAllUndirectedSimpleCircuits</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7F0AC5617CE5E9DD">5.4-34 DigraphAllChordlessCycles</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X805F15398735AD7D">5.4-35 FacialWalks</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X870E04307C5F213F">5.4-36 DigraphLayers</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7B2E42327DA118E0">5.4-37 DigraphDegeneracy</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X827C2BD17A4547E3">5.4-38 DigraphDegeneracyOrdering</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X863FDFC4839A3B82">5.4-39 HamiltonianPath</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X82F30D5681466BC6">5.4-40 NrSpanningTrees</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X79352A8286D1D8F6">5.4-41 DigraphDijkstra</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X794CD6037D4CF58C">5.4-42 DigraphCycleBasis</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X835AAF9085BC9D84">5.4-43 DigraphIsKing</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7A17B9B67AC50561">5.4-44 DigraphKings</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X82F900777D677F55">5.5 <span class="Heading">Cayley graphs of groups</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7A000B1D7CCF7093">5.5-1 GroupOfCayleyDigraph</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X8528455987D7D2BF">5.5-2 GeneratorsOfCayleyDigraph</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X790FD6647ECCAE3C">5.6 <span class="Heading">Associated semigroups</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X87D5C60D7B0C1309">5.6-1 AsSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7C6D5EC27C51066B">5.6-2 AsSemigroup</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X7E2305528492DDC0">5.7 <span class="Heading">Planarity</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7DC478637E8C190D">5.7-1 KuratowskiPlanarSubdigraph</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X78E8F09A8286501B">5.7-2 KuratowskiOuterPlanarSubdigraph</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X84E3947E7D39BA64">5.7-3 PlanarEmbedding</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X85DFB8C18088711F">5.7-4 OuterPlanarEmbedding</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X806D2D6B85E0B269">5.7-5 SubdigraphHomeomorphicToK23</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X876803517C34E1CD">5.7-6 DualPlanarGraph</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap5.html#X7FF5E2D07D48647E">5.8 <span class="Heading">Hashing</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap5.html#X7D97D990867B0149">5.8-1 DigraphHash</a></span>
</div></div>
</div>
<h3>5 <span class="Heading">Attributes and operations</span></h3>
<p><a id="X7E814B6478F7D015" name="X7E814B6478F7D015"></a></p>
<h4>5.1 <span class="Heading">Vertices and edges</span></h4>
<p><a id="X7C45F7D878D896AC" name="X7C45F7D878D896AC"></a></p>
<h5>5.1-1 DigraphVertices</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphVertices</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A list of positive integers.</p>
<p>Returns the vertices of the digraph <var class="Arg">digraph</var>.</p>
<p>Note that the vertices of a digraph are always the range of positive integers from <code class="code">1</code> to the number of vertices of the graph, <code class="func">DigraphNrVertices</code> (<a href="chap5.html#X7C6F19B57CB2E882"><span class="RefLink">5.1-2</span></a>). Arbitrary <em>labels</em> can be assigned to the vertices of a digraph; see <code class="func">DigraphVertexLabels</code> (<a href="chap5.html#X7E51F2FE87140B32"><span class="RefLink">5.1-12</span></a>) for more information about this.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph(["a", "b", "c"],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> ["a", "b", "b"],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> ["b", "c", "a"]);</span>
<immutable digraph with 3 vertices, 3 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertices(gr);</span>
[ 1 .. 3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([1, 2, 3, 4, 5, 7],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [1, 2, 2, 4, 4],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [2, 7, 5, 3, 7]);</span>
<immutable digraph with 6 vertices, 5 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertices(gr);</span>
[ 1 .. 6 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertices(RandomDigraph(100));</span>
[ 1 .. 100 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := CycleDigraph(IsMutableDigraph, 3);</span>
<mutable digraph with 3 vertices, 3 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertices(D);</span>
[ 1 .. 3 ]
</pre></div>
<p><a id="X7C6F19B57CB2E882" name="X7C6F19B57CB2E882"></a></p>
<h5>5.1-2 DigraphNrVertices</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphNrVertices</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: An non-negative integer.</p>
<p>Returns the number of vertices of the digraph <var class="Arg">digraph</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph(["a", "b", "c"],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> ["a", "b", "b"],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> ["b", "c", "a"]);</span>
<immutable digraph with 3 vertices, 3 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrVertices(gr);</span>
3
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([1, 2, 3, 4, 5, 7],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [1, 2, 2, 4, 4],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [2, 7, 5, 3, 7]);</span>
<immutable digraph with 6 vertices, 5 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrVertices(gr);</span>
6
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrVertices(RandomDigraph(100));</span>
100
<span class="GAPprompt">gap></span> <span class="GAPinput">D := CycleDigraph(IsMutableDigraph, 3);</span>
<mutable digraph with 3 vertices, 3 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrVertices(D);</span>
3
</pre></div>
<p><a id="X7D1C6A4D7ECEC317" name="X7D1C6A4D7ECEC317"></a></p>
<h5>5.1-3 DigraphEdges</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphEdges</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A list of lists of two positive integers.</p>
<p>Returns a list of edges of the digraph <var class="Arg">digraph</var>, where each edge is a pair of elements of <code class="func">DigraphVertices</code> (<a href="chap5.html#X7C45F7D878D896AC"><span class="RefLink">5.1-1</span></a>) of the form <code class="code">[source,range]</code>.</p>
<p>The entries of <code class="code">DigraphEdges(</code><var class="Arg">digraph</var><code class="code">)</code> are in one-to-one correspondence with the edges of <var class="Arg">digraph</var>. Hence <code class="code">DigraphEdges(</code><var class="Arg">digraph</var><code class="code">)</code> is duplicate-free if and only if <var class="Arg">digraph</var> contains no multiple edges.</p>
<p>The entries of <code class="code">DigraphEdges</code> are guaranteed to be sorted by their first component (i.e. by the source of each edge), but they are not necessarily then sorted by the second component.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := DigraphFromDiSparse6String(".DaXbOe?EAM@G~");</span>
<immutable multidigraph with 5 vertices, 16 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">edges := ShallowCopy(DigraphEdges(gr));; Sort(edges);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">edges;</span>
[ [ 1, 1 ], [ 1, 3 ], [ 1, 3 ], [ 1, 4 ], [ 1, 5 ], [ 2, 1 ],
[ 2, 2 ], [ 2, 3 ], [ 2, 5 ], [ 3, 2 ], [ 3, 4 ], [ 3, 5 ],
[ 4, 2 ], [ 4, 4 ], [ 4, 5 ], [ 5, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := CycleDigraph(IsMutableDigraph, 3);</span>
<mutable digraph with 3 vertices, 3 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdges(D);</span>
[ [ 1, 2 ], [ 2, 3 ], [ 3, 1 ] ]
</pre></div>
<p><a id="X85E1CFDD7E164AD0" name="X85E1CFDD7E164AD0"></a></p>
<h5>5.1-4 DigraphNrEdges</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphNrEdges</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: An integer.</p>
<p>Returns the number of edges of the digraph <var class="Arg">digraph</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([</span>
<span class="GAPprompt">></span> <span class="GAPinput">[1, 3, 4, 5], [1, 2, 3, 5], [2, 4, 5], [2, 4, 5], [1]]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrEdges(gr);</span>
15
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph(["a", "b", "c"],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> ["a", "b", "b"],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> ["b", "a", "a"]);</span>
<immutable multidigraph with 3 vertices, 3 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrEdges(gr);</span>
3
<span class="GAPprompt">gap></span> <span class="GAPinput">D := CycleDigraph(IsMutableDigraph, 3);</span>
<mutable digraph with 3 vertices, 3 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrEdges(D);</span>
3
</pre></div>
<p><a id="X7BD5D255809C859E" name="X7BD5D255809C859E"></a></p>
<h5>5.1-5 DigraphNrAdjacencies</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphNrAdjacencies</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: An integer.</p>
<p>Returns the number of sets <span class="SimpleMath">{u, v}</span> of vertices of the digraph <var class="Arg">digraph</var>, such that either <span class="SimpleMath">(u, v)</span> or <span class="SimpleMath">(v, u)</span> is an edge. The following equality holds for any digraph <code class="code">D</code> with no multiple edges: <code class="code">DigraphNrAdjacencies(D) * 2 - DigraphNrLoops(D) = DigraphNrEdges(DigraphSymmetricClosure(D))</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([</span>
<span class="GAPprompt">></span> <span class="GAPinput">[1, 3, 4, 5], [1, 2, 3, 5], [2, 4, 5], [2, 4, 5], [1]]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrAdjacencies(gr);</span>
13
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrAdjacencies(gr) * 2 - DigraphNrLoops(gr) =</span>
<span class="GAPprompt">></span> <span class="GAPinput">DigraphNrEdges(DigraphSymmetricClosure(gr));</span>
true
</pre></div>
<p><a id="X7E53E728795BB862" name="X7E53E728795BB862"></a></p>
<h5>5.1-6 DigraphNrAdjacenciesWithoutLoops</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphNrAdjacenciesWithoutLoops</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: An integer.</p>
<p>Returns the number of sets <span class="SimpleMath">{u, v}</span> of vertices of the digraph <var class="Arg">digraph</var>, such that <span class="SimpleMath">u ≠ v</span> and either <span class="SimpleMath">(u, v)</span> or <span class="SimpleMath">(v, u)</span> is an edge. The following equality holds for any digraph <code class="code">D</code> with no multiple edges: <code class="code">DigraphNrAdjacenciesWithoutLoops(D) * 2 + DigraphNrLoops(D) = DigraphNrEdges(DigraphSymmetricClosure(D))</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([</span>
<span class="GAPprompt">></span> <span class="GAPinput">[1, 3, 4, 5], [1, 2, 3, 5], [2, 4, 5], [2, 4, 5], [1]]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrAdjacenciesWithoutLoops(gr);</span>
10
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrAdjacenciesWithoutLoops(gr) * 2 + DigraphNrLoops(gr) =</span>
<span class="GAPprompt">></span> <span class="GAPinput">DigraphNrEdges(DigraphSymmetricClosure(gr));</span>
true
</pre></div>
<p><a id="X7BDABAF07917462B" name="X7BDABAF07917462B"></a></p>
<h5>5.1-7 DigraphNrLoops</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphNrLoops</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: An integer.</p>
<p>This function returns the number of loops of the digraph <var class="Arg">digraph</var>. See <code class="func">DigraphHasLoops</code> (<a href="chap6.html#X7D92935C7D535187"><span class="RefLink">6.2-1</span></a>).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph([[2, 3], [1, 4], [3, 3, 5], [], [2, 5]]);</span>
<immutable multidigraph with 5 vertices, 9 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrLoops(D);</span>
3
<span class="GAPprompt">gap></span> <span class="GAPinput">D := EmptyDigraph(5);</span>
<immutable empty digraph with 5 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrLoops(D);</span>
0
<span class="GAPprompt">gap></span> <span class="GAPinput">D := CompleteDigraph(5);</span>
<immutable complete digraph with 5 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphNrLoops(D);</span>
0
</pre></div>
<p><a id="X85D5E08280914EE4" name="X85D5E08280914EE4"></a></p>
<h5>5.1-8 DigraphSinks</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphSinks</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A list of vertices.</p>
<p>This function returns a list of the sinks of the digraph <var class="Arg">digraph</var>. A sink of a digraph is a vertex with out-degree zero. See <code class="func">OutDegreeOfVertex</code> (<a href="chap5.html#X7A09EB648070276D"><span class="RefLink">5.2-10</span></a>).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([[3, 5, 2, 2], [3], [], [5, 2, 5, 3], []]);</span>
<immutable multidigraph with 5 vertices, 9 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphSinks(gr);</span>
[ 3, 5 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := CycleDigraph(IsMutableDigraph, 3);</span>
<mutable digraph with 3 vertices, 3 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphSinks(D);</span>
[ ]
</pre></div>
<p><a id="X7F5C6268839BE98C" name="X7F5C6268839BE98C"></a></p>
<h5>5.1-9 DigraphSources</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphSources</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A list of vertices.</p>
<p>This function returns an immutable list of the sources of the digraph <var class="Arg">digraph</var>. A source of a digraph is a vertex with in-degree zero. See <code class="func">InDegreeOfVertex</code> (<a href="chap5.html#X7C9CD0527CB9E6EF"><span class="RefLink">5.2-12</span></a>).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([[3, 5, 2, 2], [3], [], [5, 2, 5, 3], []]);</span>
<immutable multidigraph with 5 vertices, 9 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphSources(gr);</span>
[ 1, 4 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := CycleDigraph(IsMutableDigraph, 3);</span>
<mutable digraph with 3 vertices, 3 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphSources(D);</span>
[ ]
</pre></div>
<p><a id="X785C30378064CF47" name="X785C30378064CF47"></a></p>
<h5>5.1-10 DigraphTopologicalSort</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphTopologicalSort</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A list of positive integers, or <code class="keyw">fail</code>.</p>
<p>If <var class="Arg">digraph</var> is a digraph whose only directed cycles are loops, then <code class="code">DigraphTopologicalSort</code> returns the vertices of <var class="Arg">digraph</var> ordered so that every edge's source appears no earlier in the list than its range. If the digraph digraph contains directed cycles of length greater than 1, then this operation returns fail.
<p>See Section <a href="chap1.html#X84541F61810C741D"><span class="RefLink">1.1-1</span></a> for the definition of a directed cycle, and the definition of a loop.</p>
<p>The method used for this attribute has complexity <span class="SimpleMath">O(m+n)</span> where <span class="SimpleMath">m</span> is the number of edges (counting multiple edges as one) and <span class="SimpleMath">n</span> is the number of vertices in the digraph.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph([</span>
<span class="GAPprompt">></span> <span class="GAPinput">[2, 3], [], [4, 6], [5], [], [7, 8, 9], [], [], []]);</span>
<immutable digraph with 9 vertices, 8 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphTopologicalSort(D);</span>
[ 2, 5, 4, 7, 8, 9, 6, 3, 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph(IsMutableDigraph, [[2, 3], [3], [4], []]);</span>
<mutable digraph with 4 vertices, 4 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphTopologicalSort(D);</span>
[ 4, 3, 2, 1 ]
</pre></div>
<p><a id="X7CA91E4B7904F793" name="X7CA91E4B7904F793"></a></p>
<h5>5.1-11 DigraphVertexLabel</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphVertexLabel</code>( <var class="Arg">digraph</var>, <var class="Arg">i</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SetDigraphVertexLabel</code>( <var class="Arg">digraph</var>, <var class="Arg">i</var>, <var class="Arg">obj</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>If <var class="Arg">digraph</var> is a digraph, then the first operation returns the label of the vertex <var class="Arg">i</var>. The second operation can be used to set the label of the vertex <var class="Arg">i</var> in <var class="Arg">digraph</var> to the arbitrary <strong class="pkg">GAP</strong> object <var class="Arg">obj</var>.</p>
<p>The label of a vertex can be changed an arbitrary number of times. If no label has been set for the vertex <var class="Arg">i</var>, then the default value is <var class="Arg">i</var>.</p>
<p>If <var class="Arg">digraph</var> is a digraph created from a record with a component <code class="code">DigraphVertices</code>, then the labels of the vertices are set to the value of this component.</p>
<p>Induced subdigraphs, and some other operations which create new digraphs from old ones, inherit their labels from their parents.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := DigraphFromDigraph6String("&DHUEe_");</span>
<immutable digraph with 5 vertices, 11 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabel(D, 3);</span>
3
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph(["a", "b", "c"], [], []);</span>
<immutable empty digraph with 3 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabel(D, 2);</span>
"b"
<span class="GAPprompt">gap></span> <span class="GAPinput">SetDigraphVertexLabel(D, 2, "d");</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabel(D, 2);</span>
"d"
<span class="GAPprompt">gap></span> <span class="GAPinput">D := InducedSubdigraph(D, [1, 2]);</span>
<immutable empty digraph with 2 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabel(D, 2);</span>
"d"
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph(IsMutableDigraph, ["e", "f", "g"], [], []);</span>
<mutable empty digraph with 3 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabel(D, 1);</span>
"e"
<span class="GAPprompt">gap></span> <span class="GAPinput">SetDigraphVertexLabel(D, 1, "h");</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabel(D, 1);</span>
"h"
<span class="GAPprompt">gap></span> <span class="GAPinput">InducedSubdigraph(D, [1, 2]);</span>
<mutable empty digraph with 2 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabel(D, 1);</span>
"h"
</pre></div>
<p><a id="X7E51F2FE87140B32" name="X7E51F2FE87140B32"></a></p>
<h5>5.1-12 DigraphVertexLabels</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphVertexLabels</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SetDigraphVertexLabels</code>( <var class="Arg">digraph</var>, <var class="Arg">list</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>If <var class="Arg">digraph</var> is a digraph, then <code class="code">DigraphVertexLabels</code> returns a copy of the labels of the vertices in <var class="Arg">digraph</var>. <code class="code">SetDigraphVertexLabels</code> can be used to set the labels of the vertices in <var class="Arg">digraph</var> to the list of arbitrary <strong class="pkg">GAP</strong> objects <var class="Arg">list</var>, which must be of the same length as the number of vertices of <var class="Arg">digraph</var>.</p>
<p>If the list <var class="Arg">list</var> is immutable, then the vertex labels are set to a mutable copy of <var class="Arg">list</var>. Otherwise, the labels are set to exactly <var class="Arg">list</var>.</p>
<p>The label of a vertex can be changed an arbitrary number of times. If no label has been set for the vertex <var class="Arg">i</var>, then the default value is <var class="Arg">i</var>.</p>
<p>If <var class="Arg">digraph</var> is a digraph created from a record with a component <code class="code">DigraphVertices</code>, then the labels of the vertices are set to the value of this component. As in the above, if the component is immutable then the digraph's vertex labels are set to a mutable copy of DigraphVertices. Otherwise, they are set to exactly DigraphVertices.
<p>Induced subdigraphs, and other operations which create new digraphs from old ones, inherit their labels from their parents.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := DigraphFromDigraph6String("&DHUEe_");</span>
<immutable digraph with 5 vertices, 11 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabels(D);</span>
[ 1 .. 5 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph(["a", "b", "c"], [], []);</span>
<immutable empty digraph with 3 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabels(D);</span>
[ "a", "b", "c" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">SetDigraphVertexLabel(D, 2, "d");</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabels(D);</span>
[ "a", "d", "c" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := InducedSubdigraph(D, [1, 3]);</span>
<immutable empty digraph with 2 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabels(D);</span>
[ "a", "c" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph(IsMutableDigraph, ["e", "f", "g"], [], []);</span>
<mutable empty digraph with 3 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetDigraphVertexLabels(D, ["h", "i", "j"]);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabels(D);</span>
[ "h", "i", "j" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">InducedSubdigraph(D, [1, 3]);</span>
<mutable empty digraph with 2 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphVertexLabels(D);</span>
[ "h", "j" ]
</pre></div>
<p><a id="X79FAEACC7F438C2F" name="X79FAEACC7F438C2F"></a></p>
<h5>5.1-13 DigraphEdgeLabel</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphEdgeLabel</code>( <var class="Arg">digraph</var>, <var class="Arg">i</var>, <var class="Arg">j</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SetDigraphEdgeLabel</code>( <var class="Arg">digraph</var>, <var class="Arg">i</var>, <var class="Arg">j</var>, <var class="Arg">obj</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>If <var class="Arg">digraph</var> is a digraph without multiple edges, then the first operation returns the label of the edge from vertex <var class="Arg">i</var> to vertex <var class="Arg">j</var>. The second operation can be used to set the label of the edge between vertex <var class="Arg">i</var> and vertex <var class="Arg">j</var> to the arbitrary <strong class="pkg">GAP</strong> object <var class="Arg">obj</var>.</p>
<p>The label of an edge can be changed an arbitrary number of times. If no label has been set for the edge, then the default value is <var class="Arg">1</var>.</p>
<p>Induced subdigraphs, and some other operations which create new digraphs from old ones, inherit their edge labels from their parents. See also <code class="func">DigraphEdgeLabels</code> (<a href="chap5.html#X7C24851087D4A8FB"><span class="RefLink">5.1-14</span></a>).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := DigraphFromDigraph6String("&DHUEe_");</span>
<immutable digraph with 5 vertices, 11 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabel(D, 3, 1);</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">SetDigraphEdgeLabel(D, 2, 5, [42]);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabel(D, 2, 5);</span>
[ 42 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := InducedSubdigraph(D, [2, 5]);</span>
<immutable digraph with 2 vertices, 3 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabel(D, 1, 2);</span>
[ 42 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := ChainDigraph(IsMutableDigraph, 5);</span>
<mutable digraph with 5 vertices, 4 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabel(D, 2, 3);</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">SetDigraphEdgeLabel(D, 4, 5, [1729]);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabel(D, 4, 5);</span>
[ 1729 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">InducedSubdigraph(D, [4, 5]);</span>
<mutable digraph with 2 vertices, 1 edge>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabel(D, 1, 2);</span>
[ 1729 ]
</pre></div>
<p><a id="X7C24851087D4A8FB" name="X7C24851087D4A8FB"></a></p>
<h5>5.1-14 DigraphEdgeLabels</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphEdgeLabels</code>( <var class="Arg">digraph</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SetDigraphEdgeLabels</code>( <var class="Arg">digraph</var>, <var class="Arg">labels</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SetDigraphEdgeLabels</code>( <var class="Arg">digraph</var>, <var class="Arg">func</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>If <var class="Arg">digraph</var> is a digraph without multiple edges, then <code class="code">DigraphEdgeLabels</code> returns a copy of the labels of the edges in <var class="Arg">digraph</var> as a list of lists <code class="code">labels</code> such that <code class="code">labels[i][j]</code> is the label on the edge from vertex <code class="code">i</code> to vertex <code class="code">OutNeighbours(digraph)[i][j]</code>. <code class="code">SetDigraphEdgeLabels</code> can be used to set the labels of the edges in <var class="Arg">digraph</var> without multiple edges to the list <var class="Arg">labels</var> of lists of arbitrary <strong class="pkg">GAP</strong> objects such that <code class="code">list[i][j]</code> is the label on the edge from vertex <code class="code">i</code> to the vertex <code class="code">OutNeighbours(digraph>[i][j]</code>. Alternatively <code class="code">SetDigraphEdgeLabels</code> can be called with binary function <var class="Arg">func</var> that as its second argument that when passed two vertices <code class="code">i</code> and <code class="code">j</code> returns the label for the edge between vertex <code class="code">i</code> and vertex <code class="code">j</code>.</p>
<p>The label of an edge can be changed an arbitrary number of times. If no label has been set for an edge, then the default value is <code class="code">1</code>.</p>
<p>Induced subdigraphs, and some other operations which create new digraphs from old ones, inherit their labels from their parents.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := DigraphFromDigraph6String("&DHUEe_");</span>
<immutable digraph with 5 vertices, 11 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabels(D);</span>
[ [ 1 ], [ 1, 1, 1 ], [ 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">SetDigraphEdgeLabel(D, 2, 1, "d");</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabels(D);</span>
[ [ 1 ], [ "d", 1, 1 ], [ 1 ], [ 1, 1, 1 ], [ 1, 1, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := InducedSubdigraph(D, [1, 2, 3]);</span>
<immutable digraph with 3 vertices, 4 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabels(D);</span>
[ [ 1 ], [ "d", 1 ], [ 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">OutNeighbours(D);</span>
[ [ 3 ], [ 1, 3 ], [ 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := CompleteBipartiteDigraph(IsMutableDigraph, 2, 3);</span>
<mutable digraph with 5 vertices, 12 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabels(D);</span>
[ [ 1, 1, 1 ], [ 1, 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">SetDigraphEdgeLabel(D, 2, 4, "a");</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabels(D);</span>
[ [ 1, 1, 1 ], [ 1, "a", 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">InducedSubdigraph(D, [1, 2, 3, 4]);</span>
<mutable digraph with 4 vertices, 8 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphEdgeLabels(D);</span>
[ [ 1, 1 ], [ 1, "a" ], [ 1, 1 ], [ 1, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">OutNeighbors(D);</span>
[ [ 3, 4 ], [ 3, 4 ], [ 1, 2 ], [ 1, 2 ] ]
</pre></div>
<p><a id="X7EFAF01B7A155157" name="X7EFAF01B7A155157"></a></p>
<h5>5.1-15 DigraphInEdges</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphInEdges</code>( <var class="Arg">digraph</var>, <var class="Arg">vertex</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A list of edges.</p>
<p><code class="code">DigraphInEdges</code> returns the list of all edges of <var class="Arg">digraph</var> which have <var class="Arg">vertex</var> as their range.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph([[2, 2], [3, 3], [4, 4], [1, 1]]);</span>
<immutable multidigraph with 4 vertices, 8 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphInEdges(D, 2);</span>
[ [ 1, 2 ], [ 1, 2 ] ]
</pre></div>
<p><a id="X7BECFE6687ECD028" name="X7BECFE6687ECD028"></a></p>
<h5>5.1-16 DigraphOutEdges</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DigraphOutEdges</code>( <var class="Arg">digraph</var>, <var class="Arg">vertex</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A list of edges.</p>
<p><code class="code">DigraphOutEdges</code> returns the list of all edges of <var class="Arg">digraph</var> which have <var class="Arg">vertex</var> as their source.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph([[2, 2], [3, 3], [4, 4], [1, 1]]);</span>
<immutable multidigraph with 4 vertices, 8 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">DigraphOutEdges(D, 2);</span>
[ [ 2, 3 ], [ 2, 3 ] ]
</pre></div>
<p><a id="X7BB8ED88835F07B4" name="X7BB8ED88835F07B4"></a></p>
<h5>5.1-17 IsDigraphEdge</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDigraphEdge</code>( <var class="Arg">digraph</var>, <var class="Arg">list</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDigraphEdge</code>( <var class="Arg">digraph</var>, <var class="Arg">u</var>, <var class="Arg">v</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: <code class="keyw">true</code> or <code class="keyw">false</code>.</p>
<p>In the first form, this function returns <code class="keyw">true</code> if and only if the list <var class="Arg">list</var> specifies an edge in the digraph <var class="Arg">digraph</var>. Specifically, this operation returns <code class="keyw">true</code> if <var class="Arg">list</var> is a pair of positive integers where <var class="Arg">list</var><code class="code">[1]</code> is the source and <var class="Arg">list</var><code class="code">[2]</code> is the range of an edge in <var class="Arg">digraph</var>, and <code class="keyw">false</code> otherwise.</p>
<p>The second form simply returns <code class="keyw">true</code> if <code class="code">[<var class="Arg">u</var>, <var class="Arg">v</var>]</code> is an edge in <var class="Arg">digraph</var>, and <code class="keyw">false</code> otherwise.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph([[2, 2], [6], [], [3], [], [1]]);</span>
<immutable multidigraph with 6 vertices, 5 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsDigraphEdge(D, [1, 1]);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsDigraphEdge(D, [1, 2]);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsDigraphEdge(D, [1, 8]);</span>
false
</pre></div>
<p><a id="X848FED0B7B4ACD1F" name="X848FED0B7B4ACD1F"></a></p>
<h5>5.1-18 IsMatching</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsMatching</code>( <var class="Arg">digraph</var>, <var class="Arg">list</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsMaximalMatching</code>( <var class="Arg">digraph</var>, <var class="Arg">list</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsMaximumMatching</code>( <var class="Arg">digraph</var>, <var class="Arg">list</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsPerfectMatching</code>( <var class="Arg">digraph</var>, <var class="Arg">list</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: <code class="keyw">true</code> or <code class="keyw">false</code>.</p>
<p>If <var class="Arg">digraph</var> is a digraph and <var class="Arg">list</var> is a list of pairs of vertices of <var class="Arg">digraph</var>, then <code class="code">IsMatching</code> returns <code class="keyw">true</code> if <var class="Arg">list</var> is a matching of <var class="Arg">digraph</var>. The operation <code class="code">IsMaximalMatching</code> returns <code class="keyw">true</code> if <var class="Arg">list</var> is a maximal matching, <code class="code">IsMaximumMatching</code> returns <code class="keyw">true</code> if <var class="Arg">list</var> is a maximum matching and <code class="code">IsPerfectMatching</code> returns <code class="keyw">true</code> if <var class="Arg">list</var> is a perfect, matching of <var class="Arg">digraph</var>, respectively. Otherwise, each of these operations return <code class="keyw">false</code>.</p>
<p>A <em>matching</em> <code class="code">M</code> of a digraph <var class="Arg">digraph</var> is a subset of the edges of <var class="Arg">digraph</var>, i.e. <code class="code">DigraphEdges(<var class="Arg">digraph</var>)</code>, such that no pair of distinct edges in <code class="code">M</code> are incident to the same vertex of <var class="Arg">digraph</var>. Note that this definition allows a matching to contain loops. See <code class="func">DigraphHasLoops</code> (<a href="chap6.html#X7D92935C7D535187"><span class="RefLink">6.2-1</span></a>). The matching <code class="code">M</code> is <em>maximal</em> if it is contained in no larger matching of the digraph, is <em>maximum</em> if it has the greatest cardinality among all matchings and is <em>perfect</em> if every vertex of the digraph is incident to an edge in the matching. Every maximum or perfect matching is maximal. Note, howev | | |