Example #1
0
class AnimalShelter:
    def __init__(self):
        self.dog_queue = Queue()
        self.cat_queue = Queue()

    def enqueue(self, animal):
        animal.time_stamp = time.time()
        if animal.type == "dog":
            self.dog_queue.add(animal)
        if animal.type == "cat":
            self.cat_queue.add(animal)

    def dequeue_any(self):
        if self.dog_queue.is_empty():
            return self.cat_queue.remove()
        if self.cat_queue.is_empty():
            return self.dog_queue.remove()
        if self.dog_queue.peek().time_stamp < self.cat_queue.peek().time_stamp:
            return self.dog_queue.remove()
        else:
            return self.cat_queue.remove()

    def dequeue_dog(self):
        return self.dog_queue.remove()

    def dequeue_cat(self):
        return self.cat_queue.remove()
    def bi_directional_search(self, src, dst):
        self._add_inverted_children()
        self.reset_node_paths()
        queue_src = Queue()
        queue_dst = Queue()
        src_visited = set()
        dst_visited = set()
        queue_src.add(src)
        src_visited.add(src)
        queue_dst.add(dst)
        dst_visited.add(dst)
        collided = False
        while not queue_src.is_empty() or not queue_dst.is_empty():
            if len(src_visited.intersection(dst_visited)) > 0:
                collided = True
                break
            if not queue_src.is_empty():
                src_output = queue_src.remove()
                for child in src_output.children:
                    if child not in src_visited:
                        child.forward_pre = src_output
                        queue_src.add(child)
                        src_visited.add(child)

            if len(src_visited.intersection(dst_visited)) > 0:
                collided = True
                break
            if not queue_dst.is_empty():
                dst_output = queue_dst.remove()
                if dst_output in self.inverted:
                    for child in self.inverted[dst_output]:
                        if child not in dst_visited:
                            child.backward_pre = dst_output
                            queue_dst.add(child)
                            dst_visited.add(child)
        if collided:
            intersect = src_visited.intersection(dst_visited).pop()
            forward = []
            ref = intersect
            while ref is not None:
                forward = [ref.data] + forward
                ref = ref.forward_pre
            ref = intersect
            backward = []
            while ref is not None:
                backward += [ref.data]
                ref = ref.backward_pre
            return forward[:-1] + backward
        else:
            return []
 def _bfs(self, start_node):
     result = []
     queue = Queue()
     queue.add(start_node)
     self.visited.add(start_node)
     while not queue.is_empty():
         output_node = queue.remove()
         for child in output_node.children:
             if child not in self.visited:
                 queue.add(child)
                 self.visited.add(child)
         result += [output_node.data]
     return result
Example #4
0
 def test_dequeue(self):
     queue = Queue()
     queue.enqueue('thingi')
     self.assertEqual(queue.dequeue(), 'thingi')
     self.assertTrue(queue.is_empty())
Example #5
0
 def test_is_empty(self):
     queue = Queue()
     self.assertTrue(queue.is_empty())
     queue.enqueue('an item')
     self.assertFalse(queue.is_empty())
 def test_is_empty(self):
     schwerns_queue = Queue()
     self.assertTrue(schwerns_queue.is_empty())
     schwerns_queue.enqueue('dicks')
     self.assertFalse(schwerns_queue.is_empty())
 def test_is_empty(self):
     schwerns_queue = Queue()
     self.assertTrue(schwerns_queue.is_empty())
     schwerns_queue.enqueue('dicks')
     self.assertFalse(schwerns_queue.is_empty())