在计算机科学中,图的存储结构主要有邻接矩阵和邻接表。邻接矩阵通过一个二维数组表示图,而邻接表则使用链表表示图的边。对于深度优先搜索(DFS),在邻接矩阵和邻接表中都有实现。
邻接矩阵存储方式中,定义了两个函数:InitGraph用于初始化邻接矩阵,dfsMGraph用于从指定顶点开始进行深度优先遍历。初始化邻接矩阵时,首先分配内存空间,然后通过输入边的信息,将矩阵中的对应位置设为1。遍历时,使用一个数组visited来标记已访问的顶点,从指定顶点开始,递归访问其所有邻接顶点。
邻接表存储方式中,定义了两个函数:InitAdj用于初始化邻接表,dfsAdj用于从指定顶点开始进行深度优先遍历。初始化邻接表时,首先分配内存空间,然后通过输入边的信息,向链表中插入边结点。遍历时,同样使用visited数组来标记已访问的顶点,从指定顶点开始,通过遍历其邻接表中的边结点来递归访问其邻接顶点。
广度优先搜索(BFS)在邻接表和邻接矩阵中也有实现。对于邻接矩阵,使用一个队列来实现广度优先遍历,从指定顶点开始,依次访问其所有邻接顶点。对于邻接表,同样使用队列,但遍历方式是通过邻接表中的边结点来访问其邻接顶点。
为了将邻接矩阵转换为邻接表,定义了graphChange函数,该函数遍历邻接矩阵,为每条边在邻接表中插入一个边结点。这样,就可以根据邻接矩阵中的信息构建邻接表,以便进行广度优先搜索。
主函数中,首先根据输入的顶点数量和边的信息初始化图,并根据不同的存储方式调用相应的深度优先和广度优先遍历函数。通过这些函数,可以观察到不同存储方式下的遍历结果。
通过上述方法,可以灵活地使用邻接矩阵和邻接表两种存储方式来实现图的深度优先搜索和广度优先搜索,满足不同的应用需求。