Пример #1
0
    def test_zigzag(self):
        gr = graph.UGraph()
        a = graph.Node('a')
        b = graph.Node('b')
        c = graph.Node('c')
        d = graph.Node('d')
        e = graph.Node('e')
        f = graph.Node('f')
        g = graph.Node('g')
        h = graph.Node('h')
        i = graph.Node('i')
        j = graph.Node('j')

        gr.addnodes(a, b, c, d, e, f, g, h, i, j)

        gr.addedge(a, b)
        gr.addedge(a, c)

        gr.addedge(b, d)
        gr.addedge(b, e)

        gr.addedge(c, f)

        gr.addedge(d, g)
        gr.addedge(d, h)

        gr.addedge(f, i)
        gr.addedge(f, j)

        r = graph.bfs_zigzag(gr, a)
        self.assertEqual('abcdefghij', r)
Пример #2
0
    def test_kruskal(self):
        # https://en.wikipedia.org/wiki/Kruskal%27s_algorithm
        gr = graph.UGraph()
        a = graph.Node('a')
        b = graph.Node('b')
        c = graph.Node('c')
        d = graph.Node('d')
        e = graph.Node('e')
        f = graph.Node('f')
        g = graph.Node('g')

        gr.addnodes(a, b, c, d, e, f, g)

        gr.addedge(a, d, 5)
        gr.addedge(a, b, 7)
        gr.addedge(b, c, 8)
        gr.addedge(b, d, 9)
        gr.addedge(b, e, 7)
        gr.addedge(c, e, 5)
        gr.addedge(d, e, 15)
        gr.addedge(d, f, 6)
        gr.addedge(f, e, 8)
        gr.addedge(e, g, 9)
        gr.addedge(f, g, 11)

        mst = graph.kruskal(gr)
        for ex in mst.edges():
            print ex
Пример #3
0
    def test_sorting(self):
        # make sure that a node's neighbors are
        # presented in sorted order.

        gr = graph.UGraph()
        a = graph.Node('a')
        b = graph.Node('b')
        c = graph.Node('c')
        d = graph.Node('d')
        e = graph.Node('e')
        f = graph.Node('f')
        g = graph.Node('g')
        h = graph.Node('h')

        gr.addnodes(a, b, c, d, e, f, g, h)

        gr.addedge(a, h)
        gr.addedge(a, g)
        gr.addedge(a, f)
        gr.addedge(a, e)
        gr.addedge(a, d)
        gr.addedge(a, c)
        gr.addedge(a, b)

        k = ""
        for n in gr.neighbors(a):
            k += str(n)

        self.assertEqual('bcdefgh', k)
Пример #4
0
    def test_bfs(self):

        gr = graph.UGraph()
        a = graph.Node('a')
        b = graph.Node('b')
        c = graph.Node('c')
        d = graph.Node('d')
        e = graph.Node('e')
        f = graph.Node('f')
        g = graph.Node('g')
        h = graph.Node('h')

        gr.addnodes(a, b, c, d, e, f, g, h)
        
        gr.addedge(a, b)
        gr.addedge(a, g)
        gr.addedge(a, d)

        gr.addedge(b, e)
        gr.addedge(b, f)

        gr.addedge(c, f)
        gr.addedge(c, h)

        gr.addedge(d, f)
        gr.addedge(e, g)

        r = graph.bfs(gr, a)
        self.assertEqual('abdgefch', r)
Пример #5
0
    def test_addNode(self):
        g = graph.UGraph()
        n1 = graph.Node('a')
        
        g.addnode(n1)
        self.assertEqual(1, len(g))

        with self.assertRaises(graph.GraphException):
            g.addnode(n1)

        n2 = graph.Node('a')

        with self.assertRaises(graph.GraphException):
            g.addnode(n2)

        self.assertEqual(1, len(g))

        n3 = graph.Node('b')
        g.addnode(n3)
        self.assertEqual(2, len(g))

        self.assertTrue(g.contains(n1))
        self.assertTrue(g.contains(n2))
        self.assertTrue(g.contains(n3))

        n4 = graph.Node('notMe')
        self.assertFalse(g.contains(n4))
Пример #6
0
 def test_bool(self):
     g = graph.UGraph()
     self.assertFalse(g)
     self.assertEqual(0, len(g))
     n = graph.Node('hello')
     g.addnode(n)
     self.assertTrue(g)
     self.assertEqual(1, len(g))
Пример #7
0
 def test_addNodes(self):
     # new convenience method
     gr = graph.UGraph()
     a = graph.Node('a')
     b = graph.Node('b')
     c = graph.Node('c')
     d = graph.Node('d')
     e = graph.Node('e')
     f = graph.Node('f')
     g = graph.Node('g')
     h = graph.Node('h')
     gr.addnodes(a, b, c, d, e, f, g, h)
     self.assertEqual(8, len(gr))
Пример #8
0
    def test_addEdge(self):
        g = graph.UGraph()
        a = graph.Node('a')
        b = graph.Node('b')
        with self.assertRaises(Exception):
            g.addedge(a, b)

        g.addnode(a)
        with self.assertRaises(Exception):
            g.addedge(a, b)

        g.addnode(b)
        g.addedge(a, b)
Пример #9
0
 def test_nodes_generator(self):
     # new convenience method
     gr = graph.UGraph()
     a = graph.Node('a')
     b = graph.Node('b')
     c = graph.Node('c')
     d = graph.Node('d')
     e = graph.Node('e')
     f = graph.Node('f')
     g = graph.Node('g')
     h = graph.Node('h')
     gr.addnodes(a, b, c, d, e, f, g, h)
     control = [a, b, c, d, e, f, g, h]
     nodes = sorted([n for n in gr.nodes()])
     self.assertEqual(control, nodes)
Пример #10
0
    def test_bfs_simple(self):

        # graph with one vertex and no edges
        # graph with one vertex and one (loop) edge

        gr = graph.UGraph()
        a = graph.Node('a')
        
        outsider = graph.Node('mr_lonely')
        
        with self.assertRaises(graph.GraphException):
            graph.bfs(gr, outsider)

        gr.addnode(a)
        gr.addedge(a, a)

        graph.bfs(gr, a)
Пример #11
0
    def test_dfs(self):

        # cf. https://www.youtube.com/watch?v=zLZhSSXAwxI

        gr = graph.UGraph()
        a = graph.Node('a')
        b = graph.Node('b')
        c = graph.Node('c')
        d = graph.Node('d')
        e = graph.Node('e')
        f = graph.Node('f')
        g = graph.Node('g')
        h = graph.Node('h')

        gr.addnodes(a, b, c, d, e, f, g, h)
        
        gr.addedge(a, b)
        gr.addedge(a, g)
        gr.addedge(a, d)

        gr.addedge(b, e)
        gr.addedge(b, f)

        gr.addedge(c, f)
        gr.addedge(c, h)

        gr.addedge(d, f)
        gr.addedge(e, g)

        outsider = graph.Node('mr_lonely')
        
        with self.assertRaises(graph.GraphException):
            graph.dfs(gr, outsider)

        r = graph.dfs(gr, a)
        self.assertEqual('abegfchd', r)
Пример #12
0
    def setUp(self):
        # sedgewick, p. 374

        gr = graph.UGraph()
        a = graph.Node('a')
        b = graph.Node('b')
        c = graph.Node('c')
        d = graph.Node('d')
        e = graph.Node('e')
        f = graph.Node('f')
        g = graph.Node('g')
        h = graph.Node('h')
        i = graph.Node('i')
        j = graph.Node('j')
        k = graph.Node('k')
        l = graph.Node('l')
        m = graph.Node('m')

        gr.addnodes(a, b, c, d, e, f, g, h, i, j, k, l, m)

        gr.addedge(h, i)

        gr.addedge(j, k)
        gr.addedge(j, m)
        gr.addedge(j, l)
        gr.addedge(l, m)

        gr.addedge(a, b)
        gr.addedge(a, c)
        gr.addedge(a, f)
        gr.addedge(a, g)
        gr.addedge(d, f)
        gr.addedge(f, e)
        gr.addedge(e, g)

        self.sedgewick = gr