图论专题--P5318 【深基18.例3】查找文献

图论专题--P5318 【深基18.例3】查找文献_第1张图片

图论专题--P5318 【深基18.例3】查找文献_第2张图片 


算是标准的dfs和bfs,唯一需要注意的是在搜索前要给每个vector进行一次从小到大排序,这样才能保证优先搜到更小的点。

排完序之后深搜一遍,宽搜一遍,分别用两个bool数组来记录点有没有被搜过就可以了。

#include 
using namespace std;

int n,m;

queue  q;
vector  a[100050];
bool judge[100050],judge2[100050];

void dfs(int x)
{
    cout<>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin >> x >> y;     //用vector存图
        a[x].push_back(y);
    }
    for(int i=1;i<=n;i++)    //每组分别进行排序
    {
      sort(a[i].begin(),a[i].end());
    }
    judge[1]=1,judge2[1]=1;     //给一号点先打上标记
    dfs(1);
    cout<

 

你可能感兴趣的:(c++,深度优先,宽度优先,c++,算法)