当前位置:网站首页>Lost a few hairs, and finally learned - graph traversal -dfs and BFS
Lost a few hairs, and finally learned - graph traversal -dfs and BFS
2022-07-02 03:39:00 【Road__】
One 、 review
Graph search algorithm is the process of traversing each node in the graph . We classify them according to the order in which their nodes are accessed . Now we will introduce Breadth first traversal (Breadth-first Search abbreviation bfs)、 Depth-first traversal (Depth-first Search abbreviation dfs) . These two algorithms are the basis of graph traversal , It is also commonly used in the preliminary exploration of data and many subsequent graph routing algorithms (Pathfinding Algorithm) Are based on this foundation .
Two 、 Breadth first traversal
3.1 brief introduction
Ergodic graph algorithm BFS Is the most commonly used method .
BFS Is a traversal algorithm , Select a node ( Source or starting node ) Start traversing and traverse the graph layer by layer , To explore neighbor nodes ( Nodes directly connected to the source node ). then , You must move to the next neighbor node .
just as BFS As your name implies , You need to traverse the graph as follows :
- First move horizontally , Access all nodes of the current layer
- Move to the next level
The following picture shows the sequence of traversal :

BFS Of Time complexity by O(V + E), among V It's the number of nodes ,E It's the number of sides .
3.2 Code
public void compute(int startId) {
System.out.println("=========== BFS ===========");
boolean[] visited = new boolean[graphApi.getVertexSize()];
//visited[startId] = true;
List<Integer> currentIds = new ArrayList<>();
currentIds.add(startId);
int depth = 1;
while (currentIds.size() != 0) {
Set<Integer> nextId = new HashSet<Integer>();
System.out.println("depth is " + (depth++) + " neighbors is " + currentIds);
for (Integer id : currentIds) {
if(visited[id]) {
continue;
}
visited[id] = true;
int[] edge = graphApi.getEdge(id);
if (edge != null) {
for (int eId : edge) {
nextId.add(eId);
}
}
}
currentIds.clear();
currentIds.addAll(nextId);
}
System.out.println("");
}
3、 ... and 、 Depth-first traversal
3.1. brief introduction
DFS The algorithm is a recursive algorithm that uses the idea of backtracking . If possible , It involves a detailed search of all nodes , If possible , By backtracking .
ad locum , word backtrack It means that when you move forward and there are no more nodes along the current path , You move backward on the same path to find the node to traverse . All nodes will be accessed on the current path , Until all unreached nodes are traversed , Then choose the next path .
DFS This recursive feature of can be implemented using stack . The basic idea is as follows :
Select a starting node and push all its adjacent nodes onto the stack .
Pop a node from the stack to select the next node to access and push all its adjacent nodes onto the stack . Repeat the process , Until the stack is empty . however , Make sure that the accessed node is marked . This will prevent you from accessing the same node multiple times . If you do not mark the visited node and you visit the same node multiple times , You may fall into an infinite loop .
The following picture shows the sequence of traversal :
DFS Of Time complexity by O(V + E), among V It's the number of nodes ,E It's the number of sides .
3.2. Code implementation
1. Recursive implementation
public void dfs(int i, boolean[] visited, GraphApi graphApi) {
System.out.print(i);
visited[i] = true;
int[] edgeIds = graphApi.getEdge(i);
if (edgeIds == null) {
System.out.print(" -> ");
return;
} else {
System.out.print(" -> ");
}
for (int edgeId : edgeIds) {
if(!visited[edgeId]) {
dfs(edgeId, visited, graphApi);
}
}
}
2. Simulate stack implementation
public void compute(int i, boolean[] visited) {
Stack<Integer> stack = new Stack<>();
// Root node stack
stack.push(i);
visited[i] = true;
while (!stack.isEmpty()) {
Integer id = stack.pop();
System.out.print(id + " -> ");
// Logical processing
int[] edge = graphApi.getEdge(id);
if(edge != null) {
for (int item : edge) {
if(!visited[item]) {
stack.push(item);
visited[item] = true;
}
}
}
}
}
Detailed source code address :
https://github.com/RoadTLife/TGraph
边栏推荐
- JS generate random numbers
- Kotlin basic learning 17
- Screenshot literacy tool download and use
- Which of PMP and software has the highest gold content?
- Review materials of project management PMP high frequency examination sites (8-1)
- The 7th Blue Bridge Cup single chip microcomputer provincial competition
- PHP array processing
- 滴滴开源DELTA:AI开发者可轻松训练自然语言模型
- MySQL advanced (Advanced) SQL statement (II)
- NLog使用
猜你喜欢

Review materials of project management PMP high frequency examination sites (8-1)

Analyse de 43 cas de réseaux neuronaux MATLAB: Chapitre 42 opérations parallèles et réseaux neuronaux - - opérations parallèles de réseaux neuronaux basées sur CPU / GPU
![[yolo3d]: real time detection of end-to-end 3D point cloud input](/img/5e/f17960d302f663db75ad82ae0fd70f.jpg)
[yolo3d]: real time detection of end-to-end 3D point cloud input

The 8th Blue Bridge Cup single chip microcomputer provincial competition

The second game of the 12th provincial single chip microcomputer competition of the Blue Bridge Cup

"Analysis of 43 cases of MATLAB neural network": Chapter 41 implementation of customized neural network -- personalized modeling and Simulation of neural network

Generate random numbers that obey normal distribution

蓝桥杯单片机省赛第十二届第一场

Basic syntax of unity script (6) - specific folder

The fourth provincial competition of Bluebridge cup single chip microcomputer
随机推荐
蓝桥杯单片机省赛第五届
How about Ping An lifetime cancer insurance?
PY3 link MySQL
Detailed explanation of ThreadLocal
Global and Chinese markets for hand hygiene monitoring systems 2022-2028: Research Report on technology, participants, trends, market size and share
The second game of the 11th provincial single chip microcomputer competition of the Blue Bridge Cup
Global and Chinese markets for infant care equipment, 2022-2028: Research Report on technology, participants, trends, market size and share
The 8th Blue Bridge Cup single chip microcomputer provincial competition
h5中的页面显示隐藏执行事件
Kotlin基础学习 17
Global and Chinese market of bone adhesives 2022-2028: Research Report on technology, participants, trends, market size and share
Review materials of project management PMP high frequency examination sites (8-1)
蓝桥杯单片机省赛第八届
Large screen visualization from bronze to the advanced king, you only need a "component reuse"!
One of the future trends of SAP ui5: embrace typescript
一天上手Aurora 8B/10B IP核(5)----从Framing接口的官方例程学起
Get started with Aurora 8b/10b IP core in one day (5) -- learn from the official routine of framing interface
Work hard all day long and be alert at sunset
Kotlin基础学习 15
Didi open source Delta: AI developers can easily train natural language models