在C++编程中,处理图的数据结构通常涉及两种主要的存储方法:邻接矩阵和邻接表。本实例重点讨论了邻接矩阵的实现,并展示了如何进行广度优先遍历(BFS)和深度优先遍历(DFS)。邻接矩阵是一种二维数组,其中的每个元素表示图中两个节点之间是否存在边。如果节点i与节点j之间存在边,则邻接矩阵的[i][j]或[j][i]位置的值为1,否则为0。对于无向图,这种关系是对称的。
在给定的代码中,`GRAPH`结构体定义了一个图,包括顶点数组`vex`,邻接矩阵`edge`,以及当前顶点数`n`和边数`e`。`Create`函数用于创建图,通过用户输入的顶点数和边数,然后逐个读取边的连接信息。例如,输入"0 1 1"表示节点0和节点1之间有一条边。
`BFS`函数实现了广度优先遍历,它使用一个队列`queue`来跟踪待访问的节点。将起始节点k入队并标记为已访问。然后进入一个循环,每次出队一个节点,并访问其未被访问的邻居,将这些邻居入队。当队列为空时,遍历结束。
`DFS`函数则执行深度优先遍历,通过递归的方式访问节点。从起始节点k开始,对于每一个未访问过的相邻节点,调用`DFS`函数,直到所有可达的节点都被访问过。
`main`函数初始化了`visited`数组,用于记录已访问的节点,并创建了一个图实例。这里,调用了`DFS`函数从节点0开始进行深度优先遍历。
广度优先遍历通常用于寻找最短路径,而深度优先遍历适用于检测环路或找到树的拓扑结构。理解这两种遍历方法对于理解和操作图数据结构至关重要,它们是图算法如最短路径计算、最小生成树等问题的基础。在实际应用中,根据问题的需求选择合适的遍历策略至关重要。