水题,图的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 */