广度优先遍历--选课的智慧
发布时间:2020-12-20 09:50:45 所属栏目:Python 来源:网络整理
导读:问题描述:我们要学习计算机基
问题描述:我们要学习计算机基础、数学、英语、算法、java五门课,但是学习算法前需要学习java、英语,学Java之前又需要学习数学和计算机基础,那么该如何选课呢? 具体关系如图所示: ? ?比如我们要选java,那么我们必须还得选数学和计算机;我们可以直接选英语; 用二维数组存储课程之间的依赖关系, preList=[[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] ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |