如果你提问里说了,代码是你写的,你要帮忙查错,我自然给你查错。
你只是让人解释什么是广度优先遍历,我为何要检查队列判空的代码?既然是老师给你留的作业,代码正确与否是你自己检测的任务,你提问要求解释的是概念,是代码的意思,不是代码的对错。敢问如果你提前运行了,你知道代码是有错误的话,你为什么没有在提问里说明代码有错误?
然后再请问,你现在理解什么是广度优先了么?那如果理解了的话,你来给我讲讲这段代码是什么意思,我看看你是怎么讲的,你认为什么样的回答算是回答了你的问题?
再重复一遍,你提问的是,解释广度优先那一段代码的意思。
我说的都是套话么?如果你都懂,你懂什么是队列的话,你就应该知道队列就是广度优先遍历中最佳的数据结构,它是让图个一个起点好像圆心一样,一圈一圈的访问所有图的其他节点。为什么叫广度优先,就是因为它像水纹一样访问图,而不是一条道走到黑。
从这段代码来看,图的存储用的是邻接表,for循环就是从连接表里取出队头元素的所有邻接点,放入队列,并设置为已访问。我不觉得你真的懂我下面说的那些,否则你不会问出队列的作用是什么,队列的作用,就是保证这个遍历算法是广度优先的。先入队的先访问,还要说什么?
我下面说的每一段话都是一句一句解释代码的意思了,拜托你能不能先有点儿知识,好好看看别人说了什么,好好弄明白自己什么叫懂,什么叫不懂,再提问型么?
图的广度优先遍历,依靠队列这个数据结构的先进先出的性质。
从一个顶点出发,先把这个顶点的所有邻接的点中,没有被访问过的顶点放入队列,并将这些顶点标记为已访问,执行一些访问的操作。
然后从队列里取出队头的元素,将队头元素的所有邻接的点中,没有被访问的顶点放入队列。重复这些,直到访问了所有顶点。
你不妨做一个图来试试看,你就能理解了。当然你一定要先学习一下队列这个数据结构,如果你不懂队列的话。