美文网首页
图的遍历

图的遍历

作者: 666_e0d5 | 来源:发表于2018-01-03 05:15 被阅读0次

深度优先搜索(Depth-First-Search,简称DFS):

(1)访问顶点v;

(2)依次从v的未被访问的邻接点出发(具体是左,右,上,下,顺时针方向什么的都可以,统一就行),遇到访问过的节点(数组保存所有访问过的节点)或者是没有路(该节点向下没有邻接点)就回退到上一节点(栈),已上一个节点为当前节点继续向下搜索,重复(2);

(3)若此时图中尚有顶点未被访问(改节点只有出度没有入度,从任何节点都不能到达),则从一个未被访问的顶点出发,重新进行(1),直到图中所有顶点均被访问过为止。

for (int i = 0; i < index; i++) {//for: 尚有顶点未被访问(改节点只有出度没有入度,从任何节点都不能到达)

if (!visiabed[i])

dfs(i);

}

private void dfs(int index) {Stack stack = new Stack<>();

if (!visiabed[index]) {//元素没有访问过

System.out.println(vertex[index]);

visiabed[index] = true; // 入栈

stack.push(index);

}

for (int i = getFirst(index); i >= 0; i = getFirst(i)) {//第一个邻接点

if (!visiabed[i]) {

System.out.println(vertex[i]);

visiabed[i] = true;// 入栈

stack.push(i);

} else {// 遇到访问过的元素就回退, 以栈顶的2个元素向后查找下一个邻接点

while (stack.size() > 1) {

int pre = stack.pop();

int ret = keyNext(stack.peek(), pre); //while  没有路了回退(该点从栈顶向后找不到下一个邻接点)

if (ret >= 0) {//找到下一个邻接点 该点为当前点递归

dfs(ret);

break;

}

}

if (stack.size() == 1) {// 自己指向自己(从头开始找,有改进)

dfs(stack.pop());

}

break;

}

}

}

广度(宽度)优先搜索( Breadth First Search,BFS ):

1、把节点的所有邻接点放到队列的末尾。

2、每次从队列的头部取出一个元素,查看这个元素所有邻接点,把它们放到队列的末尾。重复(2)直到队列为空。

4、若此时图中尚有顶点未被访问(改节点只有出度没有入度,从任何节点都不能到达),则从一个未被访问的顶点出发,重新进行(1)

for (int i = 0; i < index; i++) {// for: 尚有顶点未被访问(改节点只有出度没有入度,从任何节点都不能到达)

if (!visiabed[i])

bfs(i);

}

private void bfs(int index) {//类似树(不换行)的层次遍历

LinkedList que = new LinkedList<>();

if (!visiabed[index]) {// 元素没有访问过

System.out.println(vertex[index]);

visiabed[index] = true;

que.offer(index); //队尾

}

for (int i = getFirst(index); i >= 0; i = keyNext(index, i)) {// 该点的所有邻接点入队

if (!visiabed[i]) {

System.out.println(vertex[i]);

visiabed[i] = true;

que.offer(i);

}

}

que.poll();

if (!que.isEmpty())//

bfs(que.peek());

}

相关文章

  • 图的深度优先遍历

    数据结构遍历的意义 树的遍历 图的遍历 树的前序遍历 图遍历和树遍历区别 知识回顾 树的深度优先遍历 普通函数和递...

  • 图的深度优先遍历和马踏棋盘算法

    图的深度优先遍历思想 图的遍历通常有两种遍历次序方案: 深度优先遍历和广度优先遍历。深度优先遍历(DepthFir...

  • 图的DFS && BFS遍历

    对图的深度优先遍历: 对图的广度优先遍历:

  • 数据结构与算法学习-图的遍历

    图的遍历可以分为:深度优先遍历和广度优先遍历 一、深度优先遍历 深度优先遍历的实现思路 将图的顶点和边信息输⼊入到...

  • 图和遍历

    邻接矩阵定义一个图 其实就是二维数组来定义 图的遍历 深度搜索遍历 2.广度搜索遍历 遍历

  • 图 深度和宽度遍历

    图的深度遍历依赖于递归、 图的宽度优先遍历依赖于队列

  • 哈夫曼实现 图:十字链表,邻接多重链表,邻接表(无向),邻接表

    图的遍历: 无论是广度优先,还是深度优先都是以箭头方向右边的优先遍历; 广度优先遍历(无向图): 深度优先(无向图...

  • 11.图的广度优先遍历与无权图的最短路径

    图的广度优先遍历与无权图的最短路径 点击这里,前提知晓... 一、图的广度优先遍历 和树的广度优先遍历的思想一样,...

  • 基本数据结构

    一.图二.树 一.图 1.图的遍历: 通过深度优先遍历DFS和广度优先遍历BFS两种方式。深度优先遍历0 1 2 ...

  • 图的遍历

    树的遍历:从图中某一顶点出发,沿着一些边访问图中所有顶点,但使每个顶点仅被访问一次,这个过程叫做图的遍历。一个通常...

网友评论

      本文标题:图的遍历

      本文链接:https://www.haomeiwen.com/subject/gnvcnxtx.html