Beispiel #1
0
def hotPotato(namelist, num):
    simqueue = Queue()
    for name in namelist:
        simqueue.enqueue(name)
        while simqueue.size() > 1:
            for i in range(num):
                simqueue.enqueue(simqueue.dequeue())
                simqueue.dequeue()
        return simqueue.dequeue()
Beispiel #2
0
class DepthFirstOrder(object):
    def __init__(self, G):
        self.__marked = [False] * G.V()
        self.__pre = [-1] * G.V()
        self.__post = [-1] * G.V()

        self.__pre_counter = 0
        self.__post_counter = 0

        self.__pre_order = Queue()
        self.__post_order = Queue()

        for v in range(G.V()):
            if self.__marked[v] is False:
                self.__dfs(G, v)

    def __dfs(self, G, v):
        self.__marked[v] = True
        self.__pre[v] = self.__pre_counter
        self.__pre_counter += 1
        self.__pre_order.enqueue(v)

        for w in G.adj(v):
            if self.__marked[w] is False:
                self.__dfs(G, w)

        self.__post_order.enqueue(v)
        self.__post[v] = self.__post_counter
        self.__post_counter += 1

    def pre(self, v):
        self.__validate_vertex(v)
        return self.__pre[v]

    def post(self, v):
        self.__validate_vertex(v)
        return self.__post[v]

    def pre_order(self):
        return self.__pre_order

    def post_order(self):
        return self.__post_order

    def reverse_post(self):
        reverse = Stack()

        for v in self.__post_order:
            reverse.push(v)

        return reverse

    def __validate_vertex(self, v):
        V = len(self.__marked)
        if v < 0 or v > V:
            raise ValueError("vertex %s is not between 0 and %s" % (v, V))
    def __bfs(self, G, sources):
        q = Queue()
        for s in sources:
            self.__marked[s] = True
            self.__dist_to[s] = 0
            q.enqueue(s)

        while q.is_empty() is False:
            v = q.dequeue()
            for w in G.adj(v):
                if self.__marked[w] is False:
                    self.__edge_to[w] = v
                    self.__dist_to[w] = self.__dist_to[v] + 1
                    self.__marked[w] = True
                    q.enqueue(w)
Beispiel #4
0
from pyqueue import Queue
q=Queue()
q.enqueue(6)
q.enqueue('cat')
q.enqueue(True)
print(q.size())
print(q.dequeue())
print(q.dequeue())
print(q.size())
Beispiel #5
0
from pyqueue import Queue
q = Queue()
q.enqueue(6)
q.enqueue("cat")
q.enqueue(True)
print(q.size())
print(q.dequeue())
print(q.dequeue())
print(q.size())