DFS

/* 邻接矩阵的深度优先递归算法 */
void MGDFS(MGraph G, int i)
{
	int j;
	visited[i] = TRUE;
	printf("%c", G.vexs[i]);
	for (j = 0; j < G.numNodes; j++)
		if (G.arc[i][j] == 1 && !visited[j])
			MGDFS(G, j);/* 对为访问的邻接顶点递归调用 */
}

/* 邻接矩阵的深度遍历操作 */
void MGDFSTraverse(MGraph G)
{
	int i ;
	for (i = 0; i < G.numNodes; i++)
		visited[i] = FALSE;
	for (i = 0; i < G.numNodes; i++)
		if (!visited[i])
			MGDFS(G, i);
}



/* 邻接表的深度优先递归算法 */
void ALDFS(GraphAdjList GL, int i)
{
	EdgeNode *p;
	visited[i] = TRUE;
	printf("%c ", GL.adjList[i].data);
	p = GL.adjList[i].firstedge;
	while (p)
	{
		if (!visited[p->adjvex])
			ALDFS(GL, p->adjvex);
		p = p->next;
	}
}

/* 邻接表的深度遍历操作 */
void ALGraphdjListTraverse(GraphAdjList GL)
{
	int i;
	for (i = 0; i < GL.numVertexes; i++)
		visited[i] = FALSE;/* 初始所有顶点状态都是未访问过状态 */
	for (i = 0; i < GL.numVertexes; i++)
		if (!visited[i])
			ALDFS(GL,i);/* 对未访问过的顶点调用DFS,若是连通图,只会执行一次 */ 
}

你可能感兴趣的:(DFS)