📅  最后修改于: 2020-10-15 01:07:56             🧑  作者: Mango
在本教程的这一部分中,我们将讨论可用于遍历图形所有顶点的技术。
遍历图意味着检查图的所有节点和顶点。通过两种标准方法,我们可以遍历图形。让我们详细讨论其中的每一个。
广度优先搜索是一种图遍历算法,该算法开始从根节点遍历图并探索所有相邻节点。然后,它选择最近的节点并浏览所有未探索的节点。该算法对每个最近的节点遵循相同的过程,直到找到目标为止。
广度优先搜索的算法如下。该算法开始于检查节点A及其所有邻居。在下一步中,将探索A的最近节点的邻居,然后继续执行其他步骤。该算法探索所有节点的所有邻居,并确保每个节点仅被访问一次且没有节点被访问两次。
考虑下图所示的图形G,计算从节点A到节点E的最小路径p。假定每个边的长度为1。
最小路径P可以通过应用从节点A开始到E结束的广度优先搜索算法找到。该算法使用两个队列,即QUEUE1和QUEUE2。 QUEUE1保留所有要处理的节点,而QUEUE2保留所有要处理并从QUEUE1删除的节点。
让我们从节点A开始检查图形。
1.将A添加到QUEUE1,将NULL添加到QUEUE2。
QUEUE1 = {A}
QUEUE2 = {NULL}
2.从QUEUE1中删除节点A,然后插入其所有邻居。将节点A插入QUEUE2
QUEUE1 = {B, D}
QUEUE2 = {A}
3.从队列1中删除节点B,然后插入其所有邻居。将节点B插入QUEUE2。
QUEUE1 = {D, C, F}
QUEUE2 = {A, B}
4.从队列1中删除节点D,然后插入其所有邻居。由于F是已插入的唯一邻居,因此我们将不再插入。将节点D插入QUEUE2。
QUEUE1 = {C, F}
QUEUE2 = { A, B, D}
5.从队列1中删除节点C,然后插入其所有邻居。将节点C添加到QUEUE2。
QUEUE1 = {F, E, G}
QUEUE2 = {A, B, D, C}
6.从QUEUE1中删除F,并添加其所有邻居。由于已经添加了它的所有邻居,因此我们将不再添加它们。将节点F添加到QUEUE2。
QUEUE1 = {E, G}
QUEUE2 = {A, B, D, C, F}
7.从QUEUE1中删除E,所有E的邻居都已添加到QUEUE1中,因此我们将不再添加它们。所有节点都被访问,目标节点(即E)遇到QUEUE2。
QUEUE1 = {G}
QUEUE2 = {A, B, D, C, F, E}
现在,使用QUEUE2中可用的节点从E回溯到A。
最小路径为A→B→C→E。