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

广度优先遍历--选课的智慧,第1张

概述广度优先遍历

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

具体关系如图所示:

 

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

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

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

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

numCourses=5preListCount= [0 for _ in range(numCourses)]for line  preList:    for i  range(len(line)):        if line[i]==1:            preListCount[i]+=1print(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]

 

总结

以上是内存溢出为你收集整理的广度优先遍历--选课的智慧全部内容,希望文章能够帮你解决广度优先遍历--选课的智慧所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1189957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存