c++用dfs写代码
时间: 2024-01-27 19:03:37 浏览: 74
好的,我可以为您提供一个使用深度优先搜索(DFS)的 C++ 代码示例。
假设我们有一个无向图,其中每个节点都有一个唯一的标识符,并且我们需要找到从起始节点开始的所有可能路径。我们可以使用 DFS 来实现此目标。
具体地,我们可以从起始节点开始,访问与其相邻的节点,然后递归地访问与这些节点相邻的节点。为了避免重复访问节点,我们需要使用一个布尔数组来记录每个节点是否已经被访问过。每当我们访问一个节点时,我们将其标记为已访问,并将其添加到当前路径中。当我们遍历完所有从当前节点可达的节点时,我们需要将当前节点从路径中删除,并将其标记为未访问状态,以便在后续搜索中能够重新访问该节点。
以下是 C++ 代码示例:
```c++
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int N = 10010;
int n, m;
vector<int> g[N];
bool vis[N];
vector<int> path;
void dfs(int u) {
vis[u] = true;
path.push_back(u);
if (u == n) {
for (int i = 0; i < path.size(); i++) {
cout << path[i] << " ";
}
cout << endl;
} else {
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i];
if (!vis[v]) {
dfs(v);
}
}
}
vis[u] = false;
path.pop_back();
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
memset(vis, false, sizeof(vis));
dfs(1);
return 0;
}
```
在上面的代码中,我们使用了一个全局变量 path 来存储当前路径。当我们找到一条从起始节点到目标节点的路径时,我们将 path 中的所有节点输出。需要注意的是,由于该算法需要遍历所有从起始节点可达的路径,因此其时间复杂度较高,为 O(2^n)。
阅读全文