def manipulation(self, g):

        vd1 = g.add_vertex()
        vd2 = g.add_vertex()
        vd3 = g.add_vertex()
        vd4 = g.add_vertex()

        g.add_edge(vertex1=vd1, vertex2=vd2)
        g.add_edge(vertex1=vd1, vertex2=vd3)
        g.add_edge(vertex1=vd2, vertex2=vd4)
        visitor = bfs.distance_recording_visitor(start_vertex=vd1)
        bfs.breadth_first_search(graph=g, vertex=vd1, visitor=visitor)

        self.assertEqual(visitor.distance_for, {
            vd1: 0,
            vd2: 1,
            vd3: 1,
            vd4: 2
        })
        visitor2 = bfs.distance_recording_visitor(start_vertex=vd2)
        bfs.breadth_first_search(graph=g, vertex=vd2, visitor=visitor2)

        self.assertEqual(visitor2.distance_for, {
            vd1: 1,
            vd2: 0,
            vd3: 2,
            vd4: 1
        })
Example #2
0
    def connected_segment_from(self, atom):

        if atom not in self.descriptor_for:
            raise ValueError, "Unknown atom: %s" % atom

        from graph import breadth_first_search as bfs

        vertex = self.descriptor_for[atom]
        visitor = bfs.vertex_recording_visitor(start_vertex=vertex)
        bfs.breadth_first_search(
            graph=self.graph,
            vertex=vertex,
            visitor=visitor,
        )

        atom_for = self.atom_for

        return [atom_for[v] for v in visitor.visited_vertices]
Example #3
0
    def distances_from(self, atom):

        if atom not in self.descriptor_for:
            raise ValueError, "Unknown atom: %s" % atom

        from graph import breadth_first_search as bfs

        vertex = self.descriptor_for[atom]
        visitor = bfs.distance_recording_visitor(start_vertex=vertex)
        bfs.breadth_first_search(
            graph=self.graph,
            vertex=vertex,
            visitor=visitor,
        )

        atom_for = self.atom_for
        return dict((atom_for[v], visitor.distance_for.get(v, None))
                    for v in self.descriptors)
Example #4
0
  def connected_segment_from(self, atom):

    if atom not in self.descriptor_for:
      raise ValueError, "Unknown atom: %s" % atom

    from graph import breadth_first_search as bfs

    vertex = self.descriptor_for[ atom ]
    visitor = bfs.vertex_recording_visitor( start_vertex = vertex )
    bfs.breadth_first_search(
      graph = self.graph,
      vertex = vertex,
      visitor = visitor,
      )

    atom_for = self.atom_for

    return [ atom_for[ v ] for v in visitor.visited_vertices ]
 def test_simple_graph(self):
     node_1 = Node(1)
     node_2 = Node(2)
     node_3 = Node(3)
     node_1.add_adjacent_nodes(node_2)
     node_2.add_adjacent_nodes(node_3)
     breadth_first = breadth_first_search(node_1)
     self.assertEqual(breadth_first.get(0), [node_1])
     self.assertEqual(breadth_first.get(1), [node_2])
     self.assertEqual(breadth_first.get(2), [node_3])
Example #6
0
  def distances_from(self, atom):

    if atom not in self.descriptor_for:
      raise ValueError, "Unknown atom: %s" % atom

    from graph import breadth_first_search as bfs

    vertex = self.descriptor_for[ atom ]
    visitor = bfs.distance_recording_visitor( start_vertex = vertex )
    bfs.breadth_first_search(
      graph = self.graph,
      vertex = vertex,
      visitor = visitor,
      )

    atom_for = self.atom_for
    return dict(
      ( atom_for[ v ], visitor.distance_for.get( v, None ) )
      for v in self.descriptors
      )
  def manipulation(self, g):

    vd1 = g.add_vertex()
    vd2 = g.add_vertex()
    vd3 = g.add_vertex()
    vd4 = g.add_vertex()

    g.add_edge( vertex1 = vd1, vertex2 = vd2 )
    g.add_edge( vertex1 = vd1, vertex2 = vd3 )
    g.add_edge( vertex1 = vd2, vertex2 = vd4 )
    visitor = bfs.distance_recording_visitor( start_vertex = vd1 )
    bfs.breadth_first_search( graph = g, vertex = vd1, visitor = visitor )

    self.assertEqual(
      visitor.distance_for,
      { vd1: 0, vd2: 1, vd3: 1, vd4: 2 }
      )
    visitor2 = bfs.distance_recording_visitor( start_vertex = vd2 )
    bfs.breadth_first_search( graph = g, vertex = vd2, visitor = visitor2 )

    self.assertEqual(
      visitor2.distance_for,
      { vd1: 1, vd2: 0, vd3: 2, vd4: 1 }
      )
 def test_large_graph_with_cycle(self):
     node_0 = Node(0)
     node_1 = Node(1)
     node_2 = Node(2)
     node_3 = Node(3)
     node_2.add_adjacent_nodes(node_0)
     node_2.add_adjacent_nodes(node_3)
     node_0.add_adjacent_nodes(node_1)
     node_0.add_adjacent_nodes(node_2)
     node_1.add_adjacent_nodes(node_2)
     node_3.add_adjacent_nodes(node_3)
     breadth_first = breadth_first_search(node_2)
     self.assertEqual(breadth_first.get(0), [node_2])
     self.assertEqual(breadth_first.get(1), [node_0, node_3])
     self.assertEqual(breadth_first.get(2), [node_1])
  def manipulation(self, g):

    vd1 = g.add_vertex()
    vd2 = g.add_vertex()
    vd3 = g.add_vertex()
    vd4 = g.add_vertex()

    g.add_edge( vertex1 = vd1, vertex2 = vd2 )
    visitor = bfs.vertex_recording_visitor( start_vertex = vd1 )
    bfs.breadth_first_search( graph = g, vertex = vd1, visitor = visitor )
    self.assertEqual( visitor.visited_vertices, [ vd1, vd2 ] )

    visitor = bfs.vertex_recording_visitor( start_vertex = vd2 )
    bfs.breadth_first_search( graph = g, vertex = vd2, visitor = visitor )
    self.assertEqual( visitor.visited_vertices, [ vd2, vd1 ] )

    visitor = bfs.vertex_recording_visitor( start_vertex = vd3 )
    bfs.breadth_first_search( graph = g, vertex = vd3, visitor = visitor )
    self.assertEqual( visitor.visited_vertices, [ vd3 ] )

    g.add_edge( vertex1 = vd2, vertex2 = vd3 )
    g.add_edge( vertex1 = vd2, vertex2 = vd4 )
    visitor = bfs.vertex_recording_visitor( start_vertex = vd1 )
    bfs.breadth_first_search( graph = g, vertex = vd1, visitor = visitor )
    self.assertEqual( visitor.visited_vertices[:2], [ vd1, vd2 ] )
    self.assertEqual(
      set( visitor.visited_vertices ),
      set( [ vd1, vd2, vd3, vd4 ] ),
      )

    visitor = bfs.vertex_recording_visitor( start_vertex = vd2 )
    bfs.breadth_first_search( graph = g, vertex = vd2, visitor = visitor )
    self.assertEqual(
      set( visitor.visited_vertices ),
      set( [ vd1, vd2, vd3, vd4 ] ),
      )
    self.assertEqual( visitor.visited_vertices[0], vd2 )

    g.add_edge( vertex1 = vd1, vertex2 = vd3 )
    visitor = bfs.vertex_recording_visitor( start_vertex = vd1 )
    bfs.breadth_first_search( graph = g, vertex = vd1, visitor = visitor )
    self.assertEqual(
      set( visitor.visited_vertices ),
      set( [ vd1, vd2, vd3, vd4 ] ),
      )
    self.assertEqual( len( visitor.visited_vertices ), 4 )
 def test_empty_graph(self):
     graph = None
     self.assertEqual(breadth_first_search(graph), {})
    def manipulation(self, g):

        vd1 = g.add_vertex()
        vd2 = g.add_vertex()
        vd3 = g.add_vertex()
        vd4 = g.add_vertex()

        g.add_edge(vertex1=vd1, vertex2=vd2)
        visitor = bfs.vertex_recording_visitor(start_vertex=vd1)
        bfs.breadth_first_search(graph=g, vertex=vd1, visitor=visitor)
        self.assertEqual(visitor.visited_vertices, [vd1, vd2])

        visitor = bfs.vertex_recording_visitor(start_vertex=vd2)
        bfs.breadth_first_search(graph=g, vertex=vd2, visitor=visitor)
        self.assertEqual(visitor.visited_vertices, [vd2, vd1])

        visitor = bfs.vertex_recording_visitor(start_vertex=vd3)
        bfs.breadth_first_search(graph=g, vertex=vd3, visitor=visitor)
        self.assertEqual(visitor.visited_vertices, [vd3])

        g.add_edge(vertex1=vd2, vertex2=vd3)
        g.add_edge(vertex1=vd2, vertex2=vd4)
        visitor = bfs.vertex_recording_visitor(start_vertex=vd1)
        bfs.breadth_first_search(graph=g, vertex=vd1, visitor=visitor)
        self.assertEqual(visitor.visited_vertices[:2], [vd1, vd2])
        self.assertEqual(
            set(visitor.visited_vertices),
            set([vd1, vd2, vd3, vd4]),
        )

        visitor = bfs.vertex_recording_visitor(start_vertex=vd2)
        bfs.breadth_first_search(graph=g, vertex=vd2, visitor=visitor)
        self.assertEqual(
            set(visitor.visited_vertices),
            set([vd1, vd2, vd3, vd4]),
        )
        self.assertEqual(visitor.visited_vertices[0], vd2)

        g.add_edge(vertex1=vd1, vertex2=vd3)
        visitor = bfs.vertex_recording_visitor(start_vertex=vd1)
        bfs.breadth_first_search(graph=g, vertex=vd1, visitor=visitor)
        self.assertEqual(
            set(visitor.visited_vertices),
            set([vd1, vd2, vd3, vd4]),
        )
        self.assertEqual(len(visitor.visited_vertices), 4)