给我来一个dfs算法模板
时间: 2023-05-20 19:06:58 浏览: 70
以下是一个基本的DFS算法模板:
void dfs(int cur) {
// 处理当前节点
visited[cur] = true;
for (int i = 0; i < adj[cur].size(); i++) {
int next = adj[cur][i];
if (!visited[next]) {
dfs(next);
}
}
}
其中,adj[cur]表示节点cur的邻接表,visited[cur]表示节点cur是否已经被访问过。在处理当前节点时,可以进行一些操作,比如记录路径、更新答案等。在遍历完所有相邻节点后,需要将visited[cur]标记为true,表示该节点已经被访问过。
相关问题
c++ bfs和dfs算法模板
BFS(广度优先搜索)算法模板:
```c++
#include <iostream>
#include <queue>
using namespace std;
const int N = 1e5 + 10;
int n; // 图的大小
int g[N][N]; // 存储图的邻接矩阵
bool st[N]; // 标记数组
void bfs(int u) {
queue<int> q;
q.push(u);
st[u] = true;
while (!q.empty()) {
int t = q.front();
q.pop();
// 处理节点 t
for (int i = 1; i <= n; i++) {
if (g[t][i] && !st[i]) {
q.push(i);
st[i] = true;
}
}
}
}
int main() {
// 读入图
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> g[i][j];
}
}
// BFS 遍历整张图
for (int i = 1; i <= n; i++) {
if (!st[i]) bfs(i);
}
return 0;
}
```
DFS(深度优先搜索)算法模板:
```c++
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int n; // 图的大小
int g[N][N]; // 存储图的邻接矩阵
bool st[N]; // 标记数组
void dfs(int u) {
st[u] = true;
// 处理节点 u
for (int i = 1; i <= n; i++) {
if (g[u][i] && !st[i]) {
dfs(i);
}
}
}
int main() {
// 读入图
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> g[i][j];
}
}
// DFS 遍历整张图
for (int i = 1; i <= n; i++) {
if (!st[i]) dfs(i);
}
return 0;
}
```
注意:以上模板都是针对无向图的,如果是有向图需要修改邻接矩阵的定义和遍历方式。
写一个最基础的dfs算法java模板
下面是一个简单的DFS模板:
```java
class DFS {
private boolean[] visited;
private int[][] graph;
public void dfs(int node) {
visited[node] = true;
// 对当前节点进行处理
// ...
for (int i = 0; i < graph[node].length; i++) {
int nextNode = graph[node][i];
if (!visited[nextNode]) {
dfs(nextNode);
}
}
}
}
```
在这个模板中,图存储在二维数组`graph`中,`visited`数组用于记录节点是否已访问。对于当前节点,我们将其状态设置为已访问,然后递归地访问与它相邻的所有未访问的节点。
阅读全文