当前位置:网站首页>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);
}
*/
边栏推荐
- 记录一次压测经验总结
- 深入解析Kubebuilder
- 01机器学习相关规定
- Monitoring cannot be started after Oracle modifies the computer name
- Markdown编辑器
- AttributeError: module ‘torch._ C‘ has no attribute ‘_ cuda_ setDevice‘
- ClickHouse(03)ClickHouse怎么安装和部署
- Two methods of chromosome coordinate sequencing
- JS variable
- Using thread class and runnable interface to realize the difference between multithreading
猜你喜欢
HarmonyOS第四次培训
Sublime tips
Ansible报错:“msg“: “Invalid/incorrect password: Permission denied, please try again.“
3GPP信道模型路损基础知识
一文搞懂常见的网络I/O模型
Operand of null-aware operation ‘!‘ has type ‘SchedulerBinding‘ which excludes null.
JS also exports Excel
拿到PMP认证带来什么改变?
Monitoring cannot be started after Oracle modifies the computer name
一个酷酷的“幽灵”控制台工具
随机推荐
How to design API interface and realize unified format return?
3.基金的类型
第一篇论文的写作流程
Ansible概述和模块解释(你刚走过了今天,而扑面而来的却是昨天)
ASP. Net MVC - resource cannot be found error - asp Net MVC – Resource Cannot be found error
U++ game learning notes
【Android Kotlin协程】利用CoroutineContext实现网络请求失败后重试逻辑
Why JSON is used for calls between interfaces, how fastjson is assigned, fastjson 1.2 [email protected] Mapping relatio
The most complete learning rate adjustment strategy in history LR_ scheduler
全国气象数据/降雨量分布数据/太阳辐射数据/NPP净初级生产力数据/植被覆盖度数据
np.random.shuffle与np.swapaxis或transpose一起时要慎用
基于Bevy游戏引擎和FPGA的双人游戏
使用Thread类和Runnable接口实现多线程的区别
ThinkPHP关联预载入with
PLC模拟量输出 模拟量输出FB analog2NDA(三菱FX3U)
ClickHouse(03)ClickHouse怎么安装和部署
Operand of null-aware operation ‘!‘ has type ‘SchedulerBinding‘ which excludes null.
Understand common network i/o models
Common Oracle SQL statements
腾讯云数据库公有云市场稳居TOP 2!