zoukankan      html  css  js  c++  java
  • 深度优先搜索

    题目见http://www.jzsyz.jzedu.cn/xxjs/Suanfa/commonalg/saosuo/chapter1.htm

    有A、B、C、D、E 5本书,要分给张、王、刘、赵、钱5位同学,每人只能选1本。每个人都将自己喜爱的书填写在下表中。请你设计一个程序,打印出让每个人都满意的所有分书方案。

    这道题目如何与深度优先搜索结合起来呢。可以看如下的图,1,A表示第一个人分配书A,那么之后存在4种情况,即为下图中的情况。图比较简略,有些没画,2,A 3,A 4,A 5,A的情况比较类似,就不画了。

    通过这个图,就可以把所有的情况给穷举出来,可以看到通过深度优先搜索,从根节点到叶子节点,便是一个分配方案,在根据喜好进行剪枝,就可得到最终的分配方案。代码如下,用的是python3。

    book = [0 for x in range(0,5)]
    stack = []
    ilike = [[0,0,1,1,0],[1,1,0,0,1],[0,1,1,0,0],[0,0,0,1,0],[0,1,0,0,1]]
    count=0
    def DFS(people):
        global count
        for x in range(0,5):
            if ilike[people-1][x] ==0 :
                continue
            if book[x]==0:
                book[x]=1
                stack.append(x)
                if people==5:
                    print(stack)
                    count=count+1
                else:
                    DFS(people+1)
                book[x]=0
                stack.pop()
    DFS(1)
    print(count)
  • 相关阅读:
    团队站立会议09
    团队站立会议08
    团队绩效
    团队站立会议07
    团队站立会议06
    团队站立会议05
    团队站立会议04
    团队站立会议03
    团队站立会议02
    反转链表
  • 原文地址:https://www.cnblogs.com/cyttina/p/3061503.html
Copyright © 2011-2022 走看看