P5318 【深基18.例3】查找文献
图论中基本的深度与广度遍历,注意在遍历中如何保证先遍历编号小的结点。
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
vector<int> a[100100];
queue<int> dl;
bool b[100100];
int v,n;
void dfs(int i)
{
if(b[i]!=0||i<1||i>v) return;
b[i]=1;
cout<<i<<" ";
for(int j=0;j<a[i].size();j++)
{
dfs(a[i][j]);
}
}
void bfs(int i)
{
dl.push(i);
b[i]=1;
while(!dl.empty())
{
int x;
x=dl.front();
cout<<x<<" ";
for(int j=0;j<a[x].size();j++)
{
if(b[a[x][j]]==0)
{
dl.push(a[x][j]);
b[a[x][j]]=1;
}
}
dl.pop();
}
}
int main()
{
cin>>v>>n;
for(int i=1;i<=n;i++)
{
int x,y;
cin>>x>>y;
a[x].push_back(y);
}
for(int i=1;i<=v;i++)
{
sort(a[i].begin(),a[i].end());//保证编号小的结点优先被遍历到
}
dfs(1);
memset(b,0,sizeof(b));
cout<<endl;
bfs(1);
}
浙公网安备 33010602011771号