图的遍历

来源:互联网 发布:快消品行业数据 编辑:程序博客网 时间:2024/06/08 10:42

一、深度优先搜索(DFS)

void DFS(int V){    visit[V]=true;    for(V 的每一个邻接点 W){        if(!visit[W]){            DFS(W);        }    }}

二、广度优先搜索(BFS)

void BFS(int V){    visit[V]=true;    Q.push(V);    while(!Q.empty()){        V=Q.pop();        for(V 的每一个邻接点 W){            if(!visit[W]){                visit[W]=true;                Q.push(W);            }        }    }}

三、总结
1.图的遍历其本质是所有非顺序类数据结构的遍历。遍历数组中的元素只需要一个for就够了,遍历图中的元素,就需要使用DFS或BFS。需要访问图中的所有元素——>DFS或BFS

2.DFS是通过递归定义的,实现起来相对比较简洁方便。BFS运用了队列这种数据结构,把递归改成了非递归,节约了一定的内存空间和调用时间。

3.图的遍历核心算法都比较简单,主要应用时需要有分块的思想。实现图的遍历的前提是需要一个bool数组,表示该结点是否遍历过,这个可以在调用图的算法前定义。还有一个前提是知道如何通过一个结点访问相邻结点。满足以上2点,就可以调用遍历算法实现图的遍历了。

4.图不连通的时候,可以在遍历算法外套一个for,遍历所有结点,对于未访问过的结点,都调用一次遍历算法即可完成对于全图的遍历。

5.核心:(1)bool数组保存访问信息(2)已实现从一个结点访问所有相邻结点的代码

声明:上述代码来着中国大学mooc浙大的《数据结构》

原创粉丝点击