实现的是无向图的遍历,有向图只存一条边即可
实验图片:

#include<iostream>
#include<algorithm>
#include<set>
#include<cstring>
#define FAST ios::sync_with_stdio(flase),cin.tie(0),cout.tie(0)
#define LL long long
using namespace std;
const int N = 1e5 + 10;
int Head[N],tot,st[N];
set<int> vis;
struct E{
int to,next;
}Edge[N];
void add(int a,int b)
{
Edge[tot].to = b;
Edge[tot].next = Head[a];
Head[a] = tot ++;
}
void DFS(int root)
{
vis.insert(root);
cout << root << " ";
for(int i = Head[root] ; i != -1 ; i = Edge[i].next)
{
if(vis.find(Edge[i].to) == vis.end())
{
DFS(Edge[i].to);
}
else continue;
}
}
int main(void)
{
int n,m;
cin >> n >> m;
memset(Head,-1,sizeof Head);
for(int i = 0;i < n;i++)
{
int a,b;
cin >> a >> b;
add(a,b);
add(b,a); // no direction
}
for(int i = 1 ; i <= m ; i++)
{
if(vis.find(i) == vis.end())
{
DFS(i);
cout << endl;
}
}
return 0;
}
739

被折叠的 条评论
为什么被折叠?



