加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

广度优先遍历--选课的智慧

发布时间:2020-12-20 09:50:45 所属栏目:Python 来源:网络整理
导读:问题描述:我们要学习计算机基

问题描述:我们要学习计算机基础、数学、英语、算法、java五门课,但是学习算法前需要学习java、英语,学Java之前又需要学习数学和计算机基础,那么该如何选课呢?

具体关系如图所示:

?

?比如我们要选java,那么我们必须还得选数学和计算机;我们可以直接选英语;

用二维数组存储课程之间的依赖关系,

preList=[[0,1,0],
[0,1],0]]

我们先建立一个数组来存储每门课先修的数量,初始化为0,课程数量为numCourses:

numCourses=5
preListCount= [0 for _ in range(numCourses)]
for line  preList:
    for i  range(len(line)):
        if line[i]==1:
            preListCount[i]+=1
print(preListCount)
则课程对应的先修课列表为:
[0,2,2]

接下来,我们建立一个canTake存储当前可以选择的课程,将那些先修课数量为零的加入队列canTake:

 range(len(preListCount)):
    if preListCount[i]==0:
        canTake.append(i)
(canTake)
输出:[0,1,3]

接下来就可以进行广度优先遍历,

classTake=[]
while len(canTake)!=0:
    thisClass=canTake[0]
    del canTake[0]
    classTake.append(thisClass)
     range(numCourses):
        if preList[thisClass][i]==1:
            preListCount[i]-=1
            0:
                canTake.append(i)
(classTake)
输出:{0,3,2,4]

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读