P5318 【深基18.例3】查找文献(dfs、bfs)

水题,图的dfs和bfs,小的优先,排下序,收获是知道vector的clear不能用来数组清零。标记数组还是用普通数组,memset清空比较妥当。

#include<bits/stdc++.h>
using namespace std;
int n,m,a,b;
const int maxn=1e5+5;
vector<int>v[maxn];
int vis[maxn];
queue<int>q;
void dfs(int k){
    vis[k]=1;
    cout<<k<<" ";
    for(int i=0;i<v[k].size();i++){
        if(vis[v[k][i]]==0){
            dfs(v[k][i]);
        }
    }
}
void bfs(int k){
    q.push(1);
    while(!q.empty()){
        int t=q.front();q.pop();
        vis[t]=1;
        cout<<t<<" ";
        for(int i=0;i<v[t].size();i++){
            if(vis[v[t][i]]==0){
                q.push(v[t][i]);
                vis[v[t][i]]=1;
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<m;i++){
        cin>>a>>b;
        v[a].push_back(b);
    }
    for(int i=1;i<=n;i++)sort(v[i].begin(),v[i].end());
    memset(vis,0,sizeof(vis));
    dfs(1);cout<<endl;
    memset(vis,0,sizeof(vis));
    bfs(1);cout<<endl;
    return 0;
   // bfs(1);
}
/*
8 9
2 5
2 6
3 7
4 7
4 8
7 8
1 2
1 3
1 4

*/

 

posted @ 2020-05-18 11:53  mohari  阅读(162)  评论(0编辑  收藏  举报