//双向广搜代码框架 struct State { }; //状态 queue<State>que[2]; bool vis[2]; bool flag; void bfs(int d) { int size=que[d].size(); while(size--) { //普通单广转移新状态v if(vis[d][v]) continue; if(vis[d^1][v]) { flag=true; return; } //新状态入队 } } int dbfs() { //初始化 int cnt=0; while(true) { cnt++; if(que[0].size()<que[1].size()) bfs(0); else bfs(1); if(flag) break; } return cnt; }
双向广搜
从初始结点和目标结点开始分别作两次BFS,每次选择队列中结点少的一边进行扩展,并且检测两边是否出现了状态重合
双向广搜 代码框架
最新推荐文章于 2024-11-04 22:30:46 发布