Multigraphs
- Introduction
- Construction of Multigraphs
- The Vertex–Set and Edge–Set of Multigraphs
EdgeIndices(u, v): GrphVert, GrphVert → SeqEnum
Indices(u, v): GrphVert, GrphVert → SeqEnum
EdgeMultiplicity(u, v): GrphVert, GrphVert → RngIntElt
Multiplicity(u, v): GrphVert, GrphVert → RngIntElt
Edges(u, v): GrphVert, GrphVert → SeqEnum
IncidentEdges(u): GrphVert → SetEnum
E ! < { u, v }, i >: GrphEdgeSet, < . > → GrphEdge
E ! < [ u, v ], i >: GrphEdgeSet, < . > → GrphEdge
E.i {E . i}: GrphEdgeSet, RngIntElt → GrphEdge
EndVertices(e): GrphEdge → { GrphVert, GrphVert }
EndVertices(e): GrphEdge → [ GrphVert, GrphVert ]
InitialVertex(e): GrphEdge → GrphVert
TerminalVertex(e): GrphEdge → GrphVert
Index(e): GrphEdge → RngIntElt
s eq t: GrphEdge, GrphEdge → BoolElt
Example: GrphMult Edges
- Vertex and Edge Decorations
- Vertex Decorations: Labels
AssignLabel(~G, u, l): GrphMult, GrphVert, .
AssignLabels(~G, S, L): GrphMult, [GrphVert], SeqEnum
AssignLabels(~G, S, L): GrphMult, { @ GrphVert @}, SeqEnum
AssignVertexLabels(~G, L): GrphMult, SeqEnum
IsLabelled(u): GrphVert → BoolElt
IsLabelled(V): GrphVertSet → BoolElt
IsVertexLabelled(G): GrphMult → BoolElt
Label(u): GrphVert → .
Labels(S): [GrphVert] → SeqEnum
Labels(V): GrphVertSet → SeqEnum
VertexLabels(G): GrphMult → SeqEnum
DeleteLabel(~G, u): GrphMult, GrphVert
DeleteLabels(~G, S): GrphMult, [GrphVert]
DeleteVertexLabels(~G): GrphMult
- Edge Decorations
- Assigning Edge Decorations
AssignLabel(~G, e, l): GrphMult, GrphEdge, .
AssignCapacity(~G, e, c): GrphMult, GrphEdge, RngIntElt
AssignWeight(~G, e, w): GrphMult, GrphEdge, RngElt
AssignLabels(~G, S, D): GrphMult, [GrphEdge], SeqEnum
AssignLabels(~G, S, D): GrphMult, { @ GrphEdge @}, SeqEnum
AssignCapacities(~G, S, D): GrphMult, [GrphEdge], [RngIntElt]
AssignCapacities(~G, S, D): GrphMult, { @ GrphEdge @}, [RngIntElt]
AssignWeights(~G, S, D): GrphMult, [GrphEdge], [RngElt]
AssignWeights(~G, S, D): GrphMult, { @ GrphEdge @}, [RngElt]
AssignEdgeLabels(~G, D): GrphMult, SeqEnum
AssignCapacities(~G, D): GrphMult, [RngIntElt]
AssignWeights(~G, D): GrphMult, [RngElt]
- Testing for Edge Decorations
- Reading Edge Decorations
- Deleting Edge Decorations
DeleteLabel(~G, e): GrphMult, GrphEdge
DeleteCapacity(~G, e): GrphMult, GrphEdge
DeleteWeight(~G, e): GrphMult, GrphEdge
DeleteLabels(~G, S): GrphMult, [GrphEdge]
DeleteCapacities(~G, S): GrphMult, [GrphEdge]
DeleteWeights(~G, S): GrphMult, [GrphEdge]
DeleteEdgeLabels(~G): GrphMult
DeleteCapacities(~G): GrphMult
DeleteWeights(~G): GrphMult
- Unlabelled, or Uncapacitated, or Unweighted Graphs
- Standard Construction for Multigraphs
- Subgraphs
- Incremental Construction of Multigraphs
- Adding Vertices
G + n: GrphMult, RngIntElt → GrphMult
G +:= n: GrphMult, RngIntElt
AddVertex(~G): GrphMult
AddVertices(~G, n): GrphMult, RngIntElt
AddVertex(~G, l): GrphMult, .
AddVertices(~G, n, L): GrphMult, RngIntElt, SeqEnum
- Removing Vertices
- Adding Edges
G + { u, v }: GrphMultUnd, {{ GrphVert, GrphVert } } → GrphMultUnd, GrphEdge
G + [ u, v ]: GrphMultDir, { [ GrphVert, GrphVert ] } → GrphMultDir, GrphEdge
G + [ u, v ]: GrphNet, { [ GrphVert, GrphVert ] } → GrphNet, GrphEdge
G + { { u, v } }: GrphMultUnd, { { GrphVert, GrphVert } } → GrphMultUnd
G + [ { u, v } ]: GrphMultUnd, [ { GrphVert, GrphVert } ] → GrphMultUnd
G + { [ u, v ] }: GrphMultDir, { [ GrphVert, GrphVert ] } → GrphDir
G + [ [ u, v ] ]: GrphMultDir, [ [ GrphVert, GrphVert ] ] → GrphDir
G + { [ u, v ] }: GrphNet, { [ GrphVert, GrphVert ] } → GrphNet
G + [ [ u, v ] ]: GrphNet, [ [ GrphVert, GrphVert ] ] → GrphNet
G +:= { u, v }: GrphMultUnd, { GrphVert, GrphVert }
G +:= [ u, v ]: GrphDir, [ GrphVert, GrphVert ]
G +:= [ u, v ]: GrphNet, [ GrphVert, GrphVert ]
G +:= { { u, v } }: GrphMultUnd, { { GrphVert, GrphVert } }
G +:= [ { u, v } ]: GrphMultUnd, [ { GrphVert, GrphVert } ]
G +:= { [ u, v ] }: GrphMultDir, { [ GrphVert, GrphVert ] }
G +:= [ [ u, v ] ]: GrphMultDir, [ [ GrphVert, GrphVert ] ]
G +:= { [ u, v ] }: GrphNet, { [ GrphVert, GrphVert ] }
G +:= [ [ u, v ] ]: GrphNet, [ [ GrphVert, GrphVert ] ]
AddEdge(G, u, v): GrphMult, GrphVert, GrphVert → GrphMult, GrphEdge
AddEdge(G, u, v, l): GrphMultUnd, GrphVert, GrphVert, . → GrphMult, GrphEdge
AddEdge(G, u, v, l): GrphMultDir, GrphVert, GrphVert, . → GrphMultDir, GrphEdge
AddEdge(G, u, v, c): GrphNet, GrphVert, RngIntElt, . → GrphNet, GrphEdge
AddEdge(G, u, v, c, l): GrphNet, GrphVert, GrphVert, RngIntElt, . → GrphNet, GrphEdge
AddEdge(~G, u, v): GrphMult, GrphVert, GrphVert
AddEdge(~G, u, v, l): GrphMultUnd, GrphVert, GrphVert, .
AddEdge(~G, u, v, l): GrphMultDir, GrphVert, GrphVert, .
AddEdge(~G, u, v, c): GrphNet, GrphVert, GrphVert, RngIntElt
AddEdge(~G, u, v, c, l): GrphNet, GrphVert, GrphVert, RngIntElt, .
AddEdges(G, S): GrphMultUnd, { { GrphVert, GrphVert } } → GrphMultUnd
AddEdges(G, S): GrphMultUnd, [ { GrphVert, GrphVert } ] → GrphMultUnd
AddEdges(G, S): GrphMultDir, { [ GrphVert, GrphVert ] } → GrphMultDir
AddEdges(G, S): GrphMultDir, [ [ GrphVert, GrphVert ] ] → GrphMultDir
AddEdges(G, S): GrphNet, { [ GrphVert, GrphVert ] } → GrphNet
AddEdges(G, S): GrphNet, [ [ GrphVert, GrphVert ] ] → GrphNet
AddEdges(G, S, L): GrphMult, SeqEnum, SeqEnum → GrphMult
AddEdges(~G, S): GrphMultUnd, { { GrphVert, GrphVert } }
AddEdges(~G, S): GrphMultUnd, [ { GrphVert, GrphVert } ]
AddEdges(~G, S): GrphMultDir, { [ GrphVert, GrphVert ] }
AddEdges(~G, S): GrphMultDir, [ [ GrphVert, GrphVert ] ]
AddEdges(~G, S): GrphNet, { [ GrphVert, GrphVert ] }
AddEdges(~G, S): GrphNet, [ [ GrphVert, GrphVert ] ]
AddEdges(~G, S, L): GrphMult, SeqEnum, SeqEnum
- Removing Edges
G - e: GrphMult, GrphEdge → GrphMult
G - { e }: GrphMult, { GrphEdge } → GrphMult
G - { { u, v } }: GrphMultUnd, { { GrphVert, GrphVert rbrace } → GrphMultUnd
G - { [u, v] }: GrphMultDir, { [ GrphVert, GrphVert ] } → GrphMultDir
G -:= e: GrphMult, GrphEdge
G -:= { e }: GrphMult, { GrphEdge }
G -:= { { u, v } }: GrphMultUnd, { { GrphVert, GrphVert rbrace }
G -:= { [u, v] }: GrphMultDir, { [ GrphVert, GrphVert ] }
RemoveEdge(~G, e): GrphMult, GrphEdge
RemoveEdges(~G, S): GrphMult, { GrphEdge }
RemoveEdge(~G, u, v): GrphMult, GrphVert, GrphVert
RemoveEdges(~G, S): GrphMultDir, { { GrphVert, GrphVert } }
RemoveEdges(~G, S): GrphMultDir, { [ GrphVert, GrphVert ] }
- Vertex Insertion, Contraction
- Unions of Multigraphs
Union(G, H): GrphMultUnd, GrphMultUnd → GrphMultUnd
Union(G, H): GrphMultDir, GrphMultDir → GrphMultDir
G join H: GrphMultUnd, GrphMultUnd → GrphMultUnd
G join H: GrphMultDir, GrphMultDir → GrphMultDir
Union(N, H): GrphNet, GrphNet → GrphNet
N join H: GrphNet, GrphNet → GrphNet
& join S: [ MultiUnd ] → GrphMultUnd
& join S: [ GrphMultDir ] → GrphMultDir
& join S: [ GrphNet ] → GrphNet
& join S: { MultiUnd } → GrphMultUnd
& join S: { GrphMultDir } → GrphMultDir
& join S: { GrphNet } → GrphNet
EdgeUnion(G, H): GrphMultUnd, GrphMultUnd → GrphMultUnd
EdgeUnion(G, H): GrphMultDir, GrphMultDir → GrphMultDir
EdgeUnion(N, H): GrphNet, GrphNet → GrphNet
- Conversion Functions
- Orientated Graphs
- Converse
- Converting between Simple Graphs and Multigraphs
UnderlyingGraph(G): GrphMult → GrphUnd, GrphVertSet, GrphEdgeSet
UnderlyingGraph(G): Grph → GrphUnd, GrphVertSet, GrphEdgeSet
UnderlyingDigraph(G): GrphMult → GrphDir, GrphVertSet, GrphEdgeSet
UnderlyingDigraph(G): Grph → GrphDir, GrphVertSet, GrphEdgeSet
UnderlyingMultiGraph(G): Grph → GrphMultUnd, GrphVertSet, GrphEdgeSet
UnderlyingMultiGraph(G): GrphMult → GrphMultUnd, GrphVertSet, GrphEdgeSet
UnderlyingMultiDigraph(G): Grph → GrphMultDir, GrphVertSet, GrphEdgeSet
UnderlyingMultiDigraph(G): GrphMult → GrphMultDir, GrphVertSet, GrphEdgeSet
UnderlyingNetwork(G): Grph → GrphNet, GrphVertSet, GrphEdgeSet
UnderlyingNetwork(G): GrphMult → GrphNet, GrphVertSet, GrphEdgeSet
- Elementary Invariants and Predicates for Multigraphs
Order(G): GrphMult → RngIntElt
NumberOfVertices(G): GrphMult → RngIntElt
Size(G): GrphMult → RngIntElt
NumberOfEdges(G): GrphMult → RngIntElt
u adj v: GrphVert, GrphVert → BoolElt
e adj f: GrphEdge, GrphEdge → BoolElt
u notadj v: GrphVert, GrphVert → BoolElt
e notadj f: GrphEdge, GrphEdge → BoolElt
u in e: GrphVert, GrphEdge → BoolElt
u notin e: GrphVert, GrphEdge → BoolElt
G eq H: GrphMultUnd, GrphMultUnd → BoolElt
G eq H: GrphMultDir, GrphMultDir → BoolElt
G eq H: GrphNet, GrphNet → BoolElt
IsSubgraph(G, H): GrphMultUnd, GrphMultUnd → BoolElt
IsSubgraph(G, H): GrphMultDir, GrphMultDir → BoolElt
IsSubgraph(G, H): GrphNet, GrphNet → BoolElt
IsBipartite(G): GrphMultUnd → BoolElt
Bipartition(G): GrphMultUnd → [ { GrphVert} ]
IsRegular(G): GrphMult → BoolElt
IsComplete(G): GrphMult → BoolElt
IsEmpty(G): GrphMult → BoolElt
IsNull(G): GrphMult → BoolElt
IsSimple(G): GrphMult → BoolElt
IsSimple(G): Grph → BoolElt
IsUndirected(G): GrphMult → BoolElt
IsUndirected(G): Grph → BoolElt
IsDirected(G): GrphMult → BoolElt
IsDirected(G): Grph → BoolElt
- Adjacency and Degree
- Adjacency and Degree Functions for Multigraphs
- Adjacency and Degree Functions for Multidigraphs
InDegree(u): GrphVert → RngIntElt
OutDegree(u): GrphVert → RngIntElt
MaximumInDegree(G): GrphMultDir → RngIntElt, GrphVert
Maxindeg(G): GrphMultDir → RngIntElt, GrphVert
MinimumInDegree(G): GrphMultDir → RngIntElt, GrphVert
Minindeg(G)): GrphMultDir → RngIntElt, GrphVert
MaximumOutDegree(G): GrphMultDir → RngIntElt, GrphVert
Maxoutdeg(G): GrphMultDir → RngIntElt, GrphVert
MinimumOutDegree(G): GrphMultDir → RngIntElt, GrphVert
Minoutdeg(G): GrphMultDir → RngIntElt, GrphVert
Degree(u): GrphVert → RngIntElt
MaximumDegree(G): GrphMultDir → RngIntElt, GrphVert
Maxdeg(G): GrphMultDir → RngIntElt, GrphVert
MinimumDegree(G): GrphMultDir → RngIntElt, GrphVert
Mindeg(G): GrphMultDir → RngIntElt, GrphVert
Alldeg(G, n): GrphMultDir, RngIntElt → { GrphVert}
DegreeSequence(G): GrphMultDir → [ { GrphVert } ]
InNeighbours(u): GrphVert → { GrphVert}
InNeighbors(u): GrphVert → { GrphVert}
OutNeighbours(u): GrphVert → { GrphVert}
OutNeighbors(u): GrphVert → { GrphVert}
IncidentEdges(u): GrphVert → { GrphEdge}
- Connectedness
- Spanning Trees
SpanningTree(G): GrphMultUnd → GrphMultUnd, GrphVertSet, GrphEdgeSet
SpanningForest(G): GrphMult → GrphMult, GrphVertSet, GrphEdgeSet
BreadthFirstSearchTree(u): GrphVert → GrphMult, GrphVertSet, GrphEdgeSet
BFSTree(u): GrphVert → GrphMult
DepthFirstSearchTree(u): GrphVert → GrphMult, GrphVertSet, GrphEdgeSet, SeqEnum
DFSTree(u): GrphVert → GrphMult, GrphVertSet, GrphEdgeSet, SeqEnum
- Planar Graphs
- Distances, Shortest Paths and Minimum Weight Trees
Reachable(u, v : parameters): GrphVert, GrphVert → BoolElt, RngElt
Distance(u, v : parameters): GrphVert, GrphVert → RngElt
Distances(u : parameters): GrphVert → Eseq
PathExists(u, v : parameters): GrphVert, GrphVert → BoolElt, Eseq
Path(u, v : parameters): GrphVert, GrphVert → Eseq
ShortestPath(u, v : parameters): GrphVert, GrphVert → Eseq
Paths(u : parameters): GrphVert → Eseq
ShortestPaths(u : parameters): GrphVert → Eseq
GeodesicExists(u, v : parameters): GrphVert, GrphVert → BoolElt, Eseq
Geodesic(u, v : parameters): GrphVert, GrphVert → Eseq
Geodesics(u : parameters): GrphVert → Eseq
HasNegativeWeightCycle(u : parameters): GrphVert → BoolElt
HasNegativeWeightCycle(G): Grph → BoolElt
HasNegativeWeightCycle(G): GrphMult → BoolElt
AllPairsShortestPaths(G : parameters): Grph → SeqEnum, SeqEnum
AllPairsShortestPaths(G : parameters): GrphMult → SeqEnum, SeqEnum
MinimumWeightTree(u : parameters): GrphVert → SeqEnum
Example: GrphMult ShortP
Example: GrphMult MinW