简单图论
用邻接表的方式实现的这个无向图
map<int , vector<int> > t
然后用迭代器来遍历
flag数组判断该点是否遍历过
sort对每一个vector<int> 排序,来保证从小到大输出
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
#include<vector>
#include<cstring>
#include<cstdio>
using namespace std;
int n,e;
map < int,vector<int> >t;//邻接表
int visit[15]={0};
void dfs(int x)
{
printf(" %d",x);
visit[x]=1;
for( vector<int>::iterator it=t[x].begin() ; it!= t[x].end() ; it++ )
{
if(!visit[*it])
{
dfs(*it);
}
}
}
void bfs(int x)
{
queue<int> q;
q.push(x);
visit[x]=1;
while(!q.empty())
{
int tmp=q.front();
printf(" %d",tmp);
q.pop();
for( vector<int>::iterator it=t[tmp].begin() ; it!= t[tmp].end() ; it++ )
{
if(!visit[*it])
{
q.push(*it);
visit[*it]=1;
}
}
}
}
int main()
{
cin>>n>>e;
int x,y;
for(int i=0;i<e;i++)
{
cin>>x>>y;
t[x].push_back(y);
t[y].push_back(x);
}
for(int i=0;i<n;i++)
{
sort( t[i].begin() , t[i].end() );
}
for(int i=0;i<n;i++)
{
if(!visit[i])
{
cout<<"{";
dfs(i);
cout<<" }";
cout<<endl;
}
}
memset(visit,0,sizeof(visit));
for(int i=0;i<n;i++)
{
if(!visit[i])
{
cout<<"{";
bfs(i);
cout<<" }";
cout<<endl;
}
}
}