mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-11-06 06:43:49 +00:00
feat: 添加P5022题的DFS解法实现
实现基于优先队列的DFS遍历算法,用于解决图论题目P5022。使用bitset标记访问节点,确保正确遍历无向图。
This commit is contained in:
parent
9541f97f8b
commit
ce9f41f580
44
src/11/3/P5022.cpp
Normal file
44
src/11/3/P5022.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#include <bitset>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <functional>
|
||||||
|
#include <iostream>
|
||||||
|
#include <istream>
|
||||||
|
#include <queue>
|
||||||
|
#include <vector>
|
||||||
|
using ll = int64_t;
|
||||||
|
|
||||||
|
const ll maxn = 5000+7;
|
||||||
|
ll n,m;
|
||||||
|
std::vector<std::priority_queue<ll,std::vector<ll>,std::greater<ll>>> e;
|
||||||
|
std::bitset<maxn> b;
|
||||||
|
|
||||||
|
static inline void dfs(ll f,ll now){
|
||||||
|
// printf("dfs f=%lld, now=%lld\n",f,now);
|
||||||
|
std::cout<<now<<" ";
|
||||||
|
while(e[now].size()){
|
||||||
|
ll top = e[now].top();
|
||||||
|
// printf("top=%lld\n",top);
|
||||||
|
e[now].pop();
|
||||||
|
if(top==f || b[top])continue;
|
||||||
|
b[top]=true;
|
||||||
|
dfs(now,top);
|
||||||
|
}
|
||||||
|
// printf("---dfs f=%lld, now=%lld\n",f,now);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
std::iostream::sync_with_stdio(false);
|
||||||
|
std::cin.tie(nullptr);
|
||||||
|
|
||||||
|
std::cin>>n>>m;
|
||||||
|
e.resize(n+1);
|
||||||
|
for(ll i=1;i<=m;i++){
|
||||||
|
ll u,v;
|
||||||
|
std::cin>>u>>v;
|
||||||
|
e[u].push(v);
|
||||||
|
e[v].push(u);
|
||||||
|
}
|
||||||
|
dfs(0,1);
|
||||||
|
std::cout<<"\n";
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user