美文网首页
队列实现约瑟夫问题

队列实现约瑟夫问题

作者: 清水秋香 | 来源:发表于2020-02-20 21:10 被阅读0次
    • 约瑟夫问题
      传说犹太人反叛罗马人,落到困境,约瑟夫和39 人决定殉难,坐成一圈儿,报数1~7,报到7的 人由旁边杀死,结果约瑟夫给自己安排了个位置 ,最后活了下来......
      ❖ 模拟程序采用队列来存放所有参加游戏的人名, 按照传递土豆方向从队首排到队尾
      游戏时,队首始终是持有土豆的人
      ❖ 模拟游戏开始,只需要将队首的人出队,随即再 到队尾入队,算是土豆的一次传递
      传递了num次后,将队首的人移除,不再入队 如此反复,直到队列中剩余1人
    from pythonds.basic.queue import Queue
    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()
    
    print(hotPotato(["Bill",'David','susan','jane','kent','brad'],7))
    

    相关文章

      网友评论

          本文标题:队列实现约瑟夫问题

          本文链接:https://www.haomeiwen.com/subject/idyfqhtx.html