以洛谷P5318 【深基18.例3】查找文献为例 图的dfs和bfs遍历

以洛谷P5318 【深基18.例3】查找文献为例 图的dfs和bfs遍历

就只能在基础题里水一篇题解了。
很明显这道题无非是图存储和遍历;
一半本人喜欢用vector来存处图,
然后其它解释就放AC代码里了#include
using namespace std;
vector v[100005];//用来存储图
int vis[100005];
queue q;//bfs必备不解释
int n,m;
void dfs(int x,int cnt){
cout< if(cnt == n) return;//全部遍历完则返回
for(int i=0;i if(!vis[v[x][i]]){//如果没搜索过,进行搜索
vis[v[x][i]] = 1;//标记搜索过了
dfs(v[x][i],cnt+1);
}
}

}
void bfs(){
memset(vis,0,sizeof(vis));// 清除标记
q.push(1);
vis[1]=1;
while(!q.empty()){
int now = q.front();
q.pop();
cout<< now <<" ";//输出
for(int i = 0;i if(vis[v[now][i]]==0){
vis[v[now][i]]=1;//标记
q.push(v[now][i]);
}
}
}
}
int main(){
cin>>n>>m;//常规输入不解释
while(m–){
int x,y;
cin>>x>>y;
v[x].push_back(y);
} //用来存储图
for(int i=1;i<=n;i++){
sort(v[i].begin(),v[i].end());
}
vis[1]=1;
dfs(1,1); //存入第一个点,计数为1
cout< bfs();
return 0;
} # P5318 【深基18.例3】查找文献

你可能感兴趣的:(算法)