很简单的模板题,但是初学数据结构老师不让用STL很烦很烦!
然后我突然看到别人用数组模拟队列,顿时觉得自己过于二,那么一切变得简单起来。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=20;;
#define ll long long
#define sc scanf
#define pr printf
const ll maxr=1e10;
int a[maxn];
int n,m;
string s;
int mmap[maxn][maxn];
int vis[maxn];
void dfs(int i){
pr("%d ",i);
for(int j=0;j<n;j++){
if(vis[j]==0&&mmap[i][j]==1){
vis[j]=1;
dfs(j);
}
}
}
void bfs(int i){
int a[maxn];
memset(a,0,sizeof(a));
int l=0,r=0;
a[r++]=i;
while(l<r){
int now=a[l++];
vis[now]=1;
pr("%d ",now);
for(int j=0;j<n;j++){
if(vis[j]==0&&mmap[now][j]==1)
{a[r++]=j;vis[j]=1;}
}
}
}
int main()
{
int e;cin>>n>>e;
for(int i=0;i<e;i++){
int x,y;cin>>x>>y;
mmap[x][y]=1;
mmap[y][x]=1;
}
for(int i=0;i<n;i++){
if(vis[i]==0){
vis[i]=1;
cout<<"{ ";
dfs(i);
cout<<"}"<<endl;
}
}
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
if(vis[i]==0){
vis[i]=1;
cout<<"{ ";
bfs(i);
cout<<"}"<<endl;
}
}
return 0;
}