换成栈版顺序会变

补全 dfs_stack:不用递归,自己开一个栈。每次弹出栈顶,没走过就标记、记下,再把它没走过的邻居按 G 里的顺序依次压进去。输出访问顺序——它和递归版不一样。 本节的图:七个点,边 0-1、0-2、1-3、2-4、3-4、5-6;邻接

开始练习 →

顺序不同点集合要相同

递归版和栈版都已写好。补全 main:各跑一遍,输出三样:递归版走到几个点 / 栈版走到几个点 / 两边走到的点集合是否相同(相同输出 结果一致,否则输出 结果不一致)。 本节的图:七个点,边 0-1、0-2、1-3、2-4、3-4、5-6

开始练习 →

BFS 的走法

第 1 步:从 0 出发,步数 0 第 2 步:第 1 圈:步数 1 第 3 步:第 2 圈:步数 2 第 4 步:圈与圈之间按步数排好 0 1 3 2 4 5 6 0 1 1 2 2 广度优先搜索的走法是【0】。

开始练习 →

BFS 何时把点标成走过

BFS 里标记一个点的时机是【0】。

开始练习 →

BFS 的访问顺序性质

BFS 的访问顺序满足【0】。

开始练习 →

出队才标会有什么后果

把标记从「入队时」挪到「出队时」,后果是【0】。

开始练习 →

BFS 从 0 出发的顺序

同一张图,这次用队列一圈一圈扩。运行下面这段程序: 本节的图:七个点,边 0-1、0-2、1-3、2-4、3-4、5-6;邻接表 G 里每个点的邻居按编号从小到大排。 #include <algorithm> #include

开始练习 →

写一个 BFS

补全 bfs:用队列,入队的时候就标 visited。输出从 0 出发的访问顺序。 本节的图:七个点,边 0-1、0-2、1-3、2-4、3-4、5-6;邻接表 G 里每个点的邻居按编号从小到大排。 (本题用 g++ -std=c++17

开始练习 →

两种标记时机各入队几次

补全 pushes(g, s, mark_on_push):数出一趟 BFS 里一共往队列里放了几次。mark_on_push 为 true 是入队就标,为 false 是出队才标(放邻居时只放还没标过的,出队时发现已经走过就跳过)。两个次

开始练习 →

2 号在两种遍历里排第几

DFS 和 BFS 都已写好。补全 main:找出 2 号在两个访问顺序里分别排第几(从 1 数起),用 / 拼起来输出(DFS 在前)。 本节的图:七个点,边 0-1、0-2、1-3、2-4、3-4、5-6;邻接表 G 里每个点的邻居按编

开始练习 →