左神算法笔记(十一)——图
作者:互联网
图的存储方式:邻接表,邻接矩阵
邻接表:
邻接矩阵:
具体的方法和定义可以参考图论中的内容。
宽度优先遍历和深度优先遍历
宽度优先遍历:利用队列实现
- 从源节点开始依次按照宽度进入队列,然后弹出
- 每弹出一个点,就把该节点所有没进过队列的邻接点放入队列
- 直到队列变空
BFS:
public static void bfs(Node node){
if(node == null){
return;
}
Queue<Node> queue = new LinkedList<>();
HashSet<Node> map = new HashSet<>();
queue.add(node);
map.add(node);
while(!queue.isEmpty()){
Node cur = queue.poll();
System.out.println(cur.value);
for(Node next: cur.nexts){
if(!map.contains(next)){
map.add(next);
queue.add(next);
}
}
}
}
深度优先遍历:利用栈实现
- 从源节点开始将节点按照深度放入栈,然后弹出
- 每弹出一个点,则将该节点下一个没有进入栈的邻接点放入栈
- 直至栈变空
DFS:
public static void dfs(Node node){
if(node == null){
return;
}
Stack<Node> stack = new Stack<>();
HashSet<Node> set = new HashSet<>();
stack.add(node);
set.add(node);
System.out.println(node.value);
while(!stack.isEmpty()){
Node cur = stack.pop();
for(Node next:cur.nexts){
if(!set.contains(next)){
stack.push(cur);
stack.push(next);
set.add(next);
System.out.println(next.value);
break;
}
}
}
}
拓扑排序算法
标签:node,Node,cur,add,笔记,next,算法,左神,stack 来源: https://blog.csdn.net/qq_35065720/article/details/104198056