Ejemplo n.º 1
0
    def test_undirected_graph_search(self):
        """ Search for paths from an undirected vertex to all vertices reachable
            from it """

        """ __
           | /
           v0 - v1 - v3
             \
              v2
        """
        g = UndirectedGraph()
        g.add_vertex(v_val='v0')
        g.add_vertex(v_val='v1')
        g.add_vertex(v_val='v2')
        g.add_vertex(v_val='v3')
        g.add_vertex(v_val='v4')
        g.add_edge(('v0', 'v0'))
        g.add_edge(('v0', 'v1'))
        g.add_edge(('v0', 'v2'))
        g.add_edge(('v1', 'v3'))

        self.assertEqual(g.search('v0', goal_val='v0'), ['v0'])
        self.assertEqual(g.search('v0', goal_val='v1'), ['v0', 'v1'])
        self.assertEqual(g.search('v0', goal_val='v2'), ['v0', 'v2'])
        self.assertEqual(g.search('v0', goal_val='v3'), ['v0', 'v1', 'v3'])
        self.assertIsNone(g.search('v0', goal_val='v4'))
        self.assertEqual(g.search('v0'), {'v0': ['v0'],
                                          'v1': ['v0', 'v1'],
                                          'v2': ['v0', 'v2'],
                                          'v3': ['v0', 'v1', 'v3']})
        self.assertEqual(g.search('v0', goal_val='v0', method='depth_first'),
                         ['v0'])
        self.assertEqual(g.search('v0', goal_val='v1', method='depth_first'),
                         ['v0', 'v1'])
        self.assertEqual(g.search('v0', goal_val='v2', method='depth_first'),
                         ['v0', 'v2'])
        self.assertEqual(g.search('v0', goal_val='v3', method='depth_first'),
                         ['v0', 'v1', 'v3'])
        self.assertIsNone(g.search('v0', goal_val='v4', method='depth_first'))
        self.assertEqual(g.search('v0', method='depth_first'),
                         {'v0': ['v0'],
                          'v1': ['v0', 'v1'],
                          'v2': ['v0', 'v2'],
                          'v3': ['v0', 'v1', 'v3']})