用其他算法实现上述代码
时间: 2024-02-12 12:06:28 浏览: 23
上述代码使用了DFS算法来遍历图,并输出每个节点所在的连通块中编号最大的节点。除了DFS,还有其他算法可以实现类似的功能,例如BFS和并查集。
下面是使用BFS算法实现的代码:
```
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int MAXN = 100000;
int graph[MAXN][10];
bool visited[MAXN];
int bfs(int s) {
int max_id = s;
queue<int> q;
q.push(s);
visited[s] = true;
while (!q.empty()) {
int u = q.front();
q.pop();
for (int i = 0; i < 10; i++) {
int v = graph[u][i];
if (v == -1) break;
if (!visited[v]) {
visited[v] = true;
max_id = max(max_id, v);
q.push(v);
}
}
}
return max_id;
}
int main() {
int n, m;
cin >> n >> m;
// 初始化邻接表
memset(graph, -1, sizeof(graph));
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
graph[u-1][i%10] = v-1;
}
// 对每个节点进行遍历
memset(visited, false, sizeof(visited));
for (int i = 0; i < n; i++) {
if (!visited[i]) {
int max_id = bfs(i);
cout << max_id+1 << ' ';
}
}
return 0;
}
```
这个代码使用BFS算法来遍历图,并输出每个连通块中编号最大的节点。和DFS算法相比,BFS算法的实现更加简单,且不会导致栈溢出的问题。