图的遍历

来源:互联网 发布:心知天气 融资 编辑:程序博客网 时间:2024/06/05 21:02

深度优先遍历

深度优先遍历,也有称为深度优先搜索,简称为DFS。它从图中某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问了。若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所以顶点都被访问到为止。

对于n个顶点e条边的图来说,邻接矩阵的时间是复杂度是O(NxN),邻接表的时间复杂度是O(n+e)。

typedef int Boolean;Boolean visited[MAX];//邻接矩阵的深度优先遍历void DFS(MGraph G, int i){int j;visited[i] = TRUE;printf("%c ", G.vexs[i]);for (j = 0; j < G.numVertexes; j++)if (G.arc[i][j] == 1 && !visited[j])DFS(G, j);}void DFSTraverse(MGraph G){int i;for (i = 0; i < G.numVertexes; i++)visited[i] = FALSE;for (i = 0; i < G.numVertexes; i++)if (!visited[i])DFS(G, i);}//邻接表的深度优先遍历void DFS(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])DFS(GL, p->adjvex);p = p->next;}}void DFSTraverse(GraphAdjList GL){int i;for (i = 0; i < GL.numVertexes; i++)visited[i] = FALSE;for (i = 0; i < GL.numVertexes; i++)if (!visited[i])DFS(G, i);}

广度优先遍历

广度优先遍历,又称为广度优先搜索,简称BFS。

如果说图的深度遍历类似于树的前序遍历,那么图的广度搜索就类似于树的层序遍历。

深度遍历更适合目标比较明确,以找到目标为主要目的的情况,而广度优先更适合在不断扩大遍历范围时找到相对最优解的情况。

typedef int Boolean;Boolean visited[MAX];//邻接矩阵的广度遍历void BFSTraverse(MGraph G){int i, j;Queue Q;for (i = 0; i < G.numVertexes; i++)visited[i] = FALSE;InitQueue(&Q);for (i = 0; i < G.numVertexes; i++){if (!visited[i]){visited[i] = TRUE;printf("%c ", G.vexs[i]);EnQueue(&Q, i);while (!QueueEmpty(Q)){DeQueue(&Q, &i);for (j = 0; j < G.numVertexes; j++){if (G.arc[i][j] == 1 && !visited[j]){visited[j] = TRUE;printf("%c ", G.vexs[j]);DeQueue(&Q, j);}}}}}}//邻接表的广度遍历void BFSTraverse(GraphAdjList GL){int i;EdgeNode *p;Queue Q;for (i = 0; i < GL.numVertexes; i++)visited[i] = FALSE;InitQueue(&Q);for (i = 0; i < GL.numVertexes; i++){if (!visited[i]){visited[i] = TRUE;printf("%c ", GL.adjList[i].data);EnQueue(&Q, i);while (!QueueEmpty(Q)){DeQueue(&Q, &i);p = GL.adjList[i].firstedge;while (p){if (!visited[p->adjvex]){visited[p->adjvex] = TRUE;printf("%c ", GL.adjList[p->adjvex].data);EnQueue(&Q, p->adjvex);}p = p->next;}}}}}


0 0
原创粉丝点击