当前位置:网站首页>DFS,BFS以及图的遍历搜索
DFS,BFS以及图的遍历搜索
2022-07-06 23:08:00 【疯疯癫癫才自由】
1)DFS的基本写法:
/**
* \1) DFS的基本写法,可做模板使用
*/
/**
DFS(int index,int nowK,int sum)
{
if(满足条件)
return;
if(nowK,sum的取值是满足条件的情况下不可能的值)
return;
if(judge(index))
{
这里可以加一些约束条件,已经访问了这个节点,就将这个节点设置为已访问;
DFS(index+1);
在这儿可以进行回溯;
}
}
*/
2) BFS的基本写法
/**
2) BFS的基本写法
*/
/**
BFS(int index)
{
queue<int> q;
q.push(index);
inq[index]=true; //这儿需要注意,inq是结点是否入队,而不是是是否访问,否则会造成
while(!q.empty()) //多个相同的结点入队,这与DFS的vis函数是有区别的;
{
int top=q.front();
q.pop();
for(...)
{
将top的下一层结点的元素入队;
将入队的元素设置为已入队;
}
}
}
*/
3)图的深度优先遍历搜索(DFS)
/**
3)图的深度优先遍历搜索(DFS)
*/
/**
邻接矩阵版:
int G[maxv][maxv],maxn;
bool vis[maxv];
void DFS(index) //index为当前访问的顶点标号
{
vis[index]=true; //将index设置为已访问
for(int i=0;i<maxn;++i) //访问与index联通的点
{
if(G[index][i]!=INF&&vis[i]!=true)
DFS(i);
}
}
void DFSTrave()
{
for(int i=0;i<maxn;++i)
if(vis[i]==false)
DFS(i);
}
*/
/**
邻接表版:
int maxn,maxv;
vector<int> adj[maxv];
bool vis[maxv];
void DFS(index) //index为当前访问的顶点标号
{
vis[index]=true; //将index设置为已访问
for(int i=0;i<adj[index].size();++i)
{
int v=adj[index][i]; //注意这里是取得是adj[index]里的值
if(vis[v]==false)
DFS(v);
}
}
void DFSTrave()
{
for(int i=0;i<maxn;++i)
if(vis[i]==false)
DFS(i);
}
*/
4) 图的广度优先搜索算法
/**
4) 图的广度优先搜索算法
*/
/**
邻接矩阵版:
int G[maxv][maxv],maxn;
bool inq[maxv];
void BFS(index) //遍历index所在的连通块
{
queue<int> q;
q.push(index);
inq[index]=true;
while(!q.empty())
{
int top=q.front();
q.pop();
for(int i=0;i<maxn;++i)
{
if(G[index][i]!=INF&&inq[i]==false)
{
q.push(i);
inq[i]=true;
}
}
}
}
void DFSTrave() //遍历图G
{
for(int i=0;i<maxn;++i)
if(inq[i]==false)
DFS(i);
}
*/
/**
邻接表版:
int maxn,maxv;
vector<int> adj[maxv];
bool inq[maxv];
void BFS(index) //遍历index所在的连通块
{
queue<int> q;
q.push(index);
inq[index]=true;
while(!q.empty())
{
int top=q.front();
q.pop();
for(int i=0;i<adj[index].size();++i)
{
int v=adj[index][i]; //注意这里是取得是adj[index]里的值
if(inq[v]==false)
{
q.push(v);
inq[v]=true;
}
}
}
}
void DFSTrave() //遍历图G
{
for(int i=0;i<maxn;++i)
if(vis[i]==false)
DFS(i);
}
*/
边栏推荐
- 精彩速递|腾讯云数据库6月刊
- Vscode automatically adds a semicolon and jumps to the next line
- 拿到PMP认证带来什么改变?
- Factor analysis r practice (with R installation tutorial and code)
- ClickHouse(03)ClickHouse怎么安装和部署
- 《二》标签
- Servicemesh mainly solves three pain points
- A line of R code draws the population pyramid
- [Yugong series] go teaching course 005 variables in July 2022
- Leetcode notes
猜你喜欢
随机推荐
qt 简单布局 盒子模型 加弹簧
Pointer and array are input in function to realize reverse order output
【最佳网页宽度及其实现】「建议收藏」
AOSP ~Binder 通信原理 (一) - 概要
记录一次压测经验总结
如何设计 API 接口,实现统一格式返回?
高手勿进!写给初中级程序员以及还在大学修炼的“准程序员”的成长秘籍
IMS data channel concept of 5g vonr+
NiO related knowledge points (I)
Ansible中的inventory主机清单(预祝你我有数不尽的鲜花和浪漫)
Can I specify a path in an attribute to map a property in my class to a child property in my JSON?
Why do many people misunderstand technical debt
Run the command once per second in Bash- Run command every second in Bash?
Development thoughts of adding new requirements in secondary development
全国气象数据/降雨量分布数据/太阳辐射数据/NPP净初级生产力数据/植被覆盖度数据
R descriptive statistics and hypothesis testing
sublime使用技巧
Error: No named parameter with the name ‘foregroundColor‘
谈谈讲清楚这件事的重要性
当 Knative 遇见 WebAssembly