P5318 【深基18.例3】查找文献 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int N=1e6+100;
vector<int> e[N];
queue<int> q;
bool state[N],st[N];
void add(int x,int y)//二维vector数组存储图
{
e[x].push_back(y);
}
void dfs(int u)
{
state[u]=true;
cout<<u<<' ';
for(int i=0;i!=e[u].size();i++)
{
int j=e[u][i];
if(!state[j])
{
dfs(j);
}
}
}
void bfs(int u)
{
st[u]=true;
q.push(u);
while(q.size())
{
int t=q.front();
q.pop();
cout<<t<<' ';
for(int i=0;i!=e[t].size();i++)
{
int j=e[t][i];
if(!st[j])
{
st[j]=true;
q.push(j);
}
}
}
}
int main()
{
int n,m;
cin>>n>>m;
while(m--)
{
int x,y;
cin>>x>>y;
add(x,y);
}
for(int i=1;i<=n;i++) sort(e[i].begin(),e[i].end());
dfs(1);
puts("");
bfs(1);
return 0;
}
本人存储图的时候第一次选择的时邻接表,也就是使用的链式存储,但本题中需要对节点编号先排序再输出,而链式存储的排序本人感觉并不是那么好写,在请教大佬后便改为了使用二维的动态数组(vector)来存储,排序时遍历数组的每一层并使用sort()函数就非常完美解决了这个问题。