Graph

Datastruktur för en graf?


In [2]:
from graphviz import Digraph

In [3]:
adj = {};

def addEdge(v, w):
    bag = adj.get(v, set())
    bag.add(w)
    adj[v] = bag

def removeEdge(v, w):
    bag = adj.get(v)
    if bag is not None:
        bag.remove(w)
        adj[v] = bag

In [4]:
addEdge(0, 1)
addEdge(1, 0)
addEdge(1, 2)
addEdge(3, 4)
addEdge(0, 3)
addEdge(2, 0)

In [5]:
print(adj)

#removeEdge(0,1)
#print(adj)
g = Digraph(comment = 'My graph')

for n in adj.keys():
    for a in adj.get(n):
        g.edge(str(n), str(a), str(n), color='red', arrowhead = 'open', style = 'dashed')

g


{0: {1, 3}, 1: {0, 2}, 3: {4}, 2: {0}}
Out[5]:
%3 0 0 1 1 0->1 0 3 3 0->3 0 1->0 1 2 2 1->2 1 4 4 3->4 3 2->0 2

In [10]:
dot = Digraph(comment='The Round Table')

In [11]:
dot.node('A', 'King Arthur')
dot.node('B', 'Sir Bedevere the Wise')
dot.node('L', 'Sir Lancelot the Brave')
dot.node('G', 'Guinevere')

dot.edges(['AB', 'AL'])
dot.edge('B', 'L', constraint='false')
dot.edge('L', 'G')
dot


Out[11]:
%3 A King Arthur B Sir Bedevere the Wise A->B L Sir Lancelot the Brave A->L B->L G Guinevere L->G

In [8]:
print(dot.source)


// The Round Table
digraph {
	A [label="King Arthur"]
	B [label="Sir Bedevere the Wise"]
	L [label="Sir Lancelot the Brave"]
	A -> B
	A -> L
	B -> L [constraint=false]
}

In [57]:
dot.render('test-output/round-table.gv', view=True)


Out[57]:
'test-output/round-table.gv.pdf'

In [ ]: