class Customs:
    def __init__(self, gate_num, duration, arrive_interval, check_interval):
        self.simulation = Simulation(duration)
        self.waitline = SQueue()
        self.duration = duration
        self.gates = [0] * gate_num
        self.total_wait_time = 0
        self.total_used_time = 0
        self.car_num = 0
        self.arrive_interval = arrive_interval
        self.check_interval = check_interval

    def wait_time_acc(self, n):
        self.total_wait_time = self.total_wait_time + n

    def used_time_acc(self, n):
        self.total_used_time = self.total_used_time + n

    def car_count_acc(self):
        self.car_num = self.car_num + 1

    def add_event(self, event):
        self.simulation.add_event(event)

    def cur_time(self):
        return self.simulation.cur_time()

    def enqueue(self, car):
        self.waitline.enqueue(car)

    def has_queued_car(self):
        return not self.waitline.is_empty()

    def next_car(self):
        return self.waitline.dequeue()

    def find_gate(self):
        for i in range(len(self.gates)):
            if self.gates[i] == 0:
                self.gates[i] = 1
                return i

        return None

    def free_gate(self, i):
        if self.gates[i] == 1:
            self.gates[i] = 0
        else:
            raise ValueError("Clear gate error")

    def simulate(self):
        Arrive(0, self)  #initially generate one car
        self.simulation.run()
        self.statistics()

    def statistics(self):
        pass
Ejemplo n.º 2
0
def levelorder(t, proc):
    qu = SQueue()
    qu.enqueue(t)
    while not qu.is_empty():
        n = qu.dequeue()
        if n is None:  # 如果弹出的树为空的话,直接跳过
            continue
        qu.enqueue(n.left)
        qu.enqueue(n.right)
        proc(n.data)
 def __init__(self, gate_num, duration, arrive_interval, check_interval):
     self.simulation = Simulation(duration)
     self.waitline = SQueue()
     self.duration = duration
     self.gates = [0] * gate_num
     self.total_wait_time = 0
     self.total_used_time = 0
     self.car_num = 0
     self.arrive_interval = arrive_interval
     self.check_interval = check_interval
Ejemplo n.º 4
0
def wfs_traverse(t, proc):  #wfs 先根序
    qu = SQueue()
    qu.enqueue(t)
    while not qu.is_empty():
        t = qu.dequeue()
        if t is None:
            continue
        qu.enqueue(t.left)
        qu.enqueue(t.right)
        proc(t.data)
Ejemplo n.º 5
0
def topo_sort(graph):
    vertex_num = graph.get_ver_num()
    indegree, topo_seq = [0] * vertex_num, []

    for vi in range(vertex_num):
        for v, w in graph.get_outedges(vi):
            indegree[v] = indegree[v] + 1

    qu = SQueue()
    for vi in range(vertex_num):
        if indegree[vi] == 0:
            qu.enqueue(vi)

    if qu.is_empty():
        return False

    while not qu.is_empty():

        v_non_in = qu.dequeue()
        topo_seq.append(v_non_in)

        for v, w in graph.get_outedges(v_non_in):
            indegree[v] = indegree[v] - 1
            if indegree[v] == 0:
                qu.enqueue(v)

    return topo_seq
def level_order(tree, func):
    q = SQueue()
    q.enqueue(tree)
    while not q.is_empty():
        tree = q.dequeue()
        if tree is None:
            continue
        q.enqueue(tree.left)
        q.enqueue(tree.right)
        func(tree.root)
Ejemplo n.º 7
0
def bfs(graph, s):
    queue = SQueue()
    queue.enqueue(s)
    seen = set()
    seen.add(s)
    while not queue.is_empty():
        vertex = queue.dequeue()
        nodes = graph[vertex]
        for i in nodes:
            if i not in seen:
                queue.enqueue(i)
                seen.add(i)
        print vertex
def BFS_graph(graph, v0):
    vnum = graph.vertex_num()
    visited = [0] * vnum
    visited[v0] = 1
    BFS_seq = [v0]
    qu = SQueue()
    qu.enqueue(graph.out_edges(v0))
    while not qu.is_empty():
        edges = qu.dequeue()
        for i in range(len(edges)):
            v, e = edges[i]
            if not visited[v]:
                BFS_seq.append[v]
                visited[v] = 1
                qu.enqueue(graph.out_edges(v))
    return BFS_seq
Ejemplo n.º 9
0
def find_path_queue(maze, start, end):
    if start == end:
        print('path find')

    q = SQueue()
    mark(maze, start)
    q.enqueue(start)
    while not q.is_empty():
        pos = q.dequeue()
        for i in range(4):
            next_p = (pos[0]+dirs[i][0], pos[1]+dirs[i][1])
            if possible(maze, next_p):
                if next_p == end:
                    print('path find')
                    return
                mark(maze, next_p)
                q.enqueue(next_p)
    print('no path')
Ejemplo n.º 10
0
def BFS_SpanTree(graph, v0):
    vertex_num = graph.get_ver_num()
    bfs_spantree = []
    visited = [0] * vertex_num
    visited[v0] = 1

    qu = SQueue()
    qu.enqueue((v0, graph.get_outedges(v0)))

    while not qu.is_empty():
        prev_v, edges = qu.dequeue()
        for i in range(len(edges)):
            v, w = edges[i]
            if not visited[v]:
                visited[v] = 1
                qu.enqueue((v0, graph.get_outedges(v)))
                bfs_spantree.append(prev_v, w, v)

    return bfs_spantree
Ejemplo n.º 11
0
def BFS_graph(graph, v0):
    vertex_num = graph.get_ver_num()
    bfs_seq = [v0]
    visited = [0] * vertex_num
    visited[v0] = 1

    qu = SQueue()
    qu.enqueue(graph.get_outedges(v0))

    while not qu.is_empty():
        edges = qu.dequeue()

        for i in range(len(edges)):
            v = edges[i][0]
            if not visited[v]:
                qu.enqueue(graph.get_outedges(v))
                visited[v] = 1
                bfs_seq.append(v)

    return bfs_seq
Ejemplo n.º 12
0
        surface.print_surface(*pos, 'D')
    surface.print_surface()


async def run(squeue: 'Queue[KeyboardEvent]'):
    _input = Queue()
    _output = Queue()

    c = Computer(code)

    c_execution = asyncio.create_task(c.run(_input, _output))
    d_execution = asyncio.create_task(droid(squeue, _input, _output))

    await asyncio.wait([c_execution, d_execution], return_when=FIRST_COMPLETED)


if __name__ == '__main__':
    keyboard_queue = SQueue()

    def queue_keyboardevent(e):
        keyboard_queue.put(e)

    keyboard.hook_key('w', queue_keyboardevent)
    keyboard.hook_key('a', queue_keyboardevent)
    keyboard.hook_key('s', queue_keyboardevent)
    keyboard.hook_key('d', queue_keyboardevent)
    keyboard.hook_key('x', queue_keyboardevent)

    asyncio.run(run(keyboard_queue))
class Customs:
      def __init__(self, gate_num, duration, arrive_interval, check_interval):
          self.simulation = Simulation(duration)
          self.waitline = SQueue()
          self.duration = duration
          self.gates = [0] * gate_num
          self.total_wait_time = 0
          self.total_used_time = 0
          self.car_num = 0
          self.arrive_interval = arrive_interval
          self.check_interval = check_interval
          
      def wait_time_acc(self, n):
          self.total_wait_time += n
          
      def total_time_acc(self, n):
          self.total_used_time += n
          
      def car_count_1(self):
          self.car_num += 1
          
      def add_event(self, event):
          self.simulation.add_event(event)

      def cur_time(self):
          return self.simulation.cur_time()
        
      def enqueue(self, car):
          self.waitline.enqueue(car)
          
      def has_queued_car(self):
          return not self.waitline.is_empty()
        
      def next_car(self):
          return self.waitline.dequeue()
        
      def find_gate(self):
          for i in range(len(self.gates)):
              if self.gates[i] == 0:
                  self.gates[i] = 1
                  return i
          return None
        
      def free_gate(self, i):
          if self.gates[i] == 1:
              self.gates[i] == 0
          else:
              raise ValueError('Clear gate Error.')
            
      def simulate(self):
          Arrive(0, self)
          self.simulation.run()
          self.statistics()
          
      def statistics(self):
          print("Simulate " + str(self.duration) + " minutes, for " + str(len(self.gates)) + " gates")
          print(self.car_num, "cars pass the customs")
          print("Average waiting time:", self.total_wait_time / self.car_num)
          print("Average passing time:", self.total_used_time / self.car_num)
          i = 0
          while not self.waitline.is_empty():
              self.waitline.dequeue()
              i += 1
          print(i, "cars are in waiting line.")