python算法之广度优先遍历算法(解决选课的烦恼程序)

本文介绍了如何使用Python的广度优先遍历算法解决选课问题。通过建立课程依赖关系图,计算每门课程的先修课数量,并使用队列管理可以选修的课程,从而确定最佳选课顺序。
摘要由CSDN通过智能技术生成

广度优先遍历(解决选课的烦恼程序)

广度优先遍历也是从某个状态出发查询可以达到的所有状态,总是先去查询距离初始状态最近的状态。

问题:

小郎正在面临选课的问题,我们要学习计算机基础、数学、英语、算法、Java等五门课程,其中学习算法前需要先学习Java、英语,学Java前又需要学数学和计算机基础,那么小郎该如何选课?

选课图:
在这里插入图片描述

解决问题

我们先给每门课设置一个编号,编号从0卡死hi。先选课的关系如何表达呢,课程与课程间的依赖关系以一个二维数组的形式给出,如下图。例如数组中第一行第三列的1表示课程0是课程2的先修课。

课程间的依赖关系图:
在这里插入图片描述
开始选课时,小郎只能选择没有先修课的科目,比如先选数学,然后在选择计算机基础,这样一来,就可以学Java了。为了找出没有先修课的科目,需要建立一个数组来记录每门课的先修课数量,将每门课的先修课数量初始值为0,课程数量为numCourses。

python中数组也叫列表。

接着,需要通过先修课的二维数组preList来计算每门课的先修课数量,代码如下:

    for line in preList:  #取出二维数组中的每一行
        for i in range(len(line)):   #针对每一行来为preListCount赋值
            if line[i] == 1:
                preListCount[i] += 1

经过计算,可以得出每门课的先修课数量,如下图:

在这里插入图片描述

接下来,建立一个队列canTake存储目前

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值