dfs與bfs常用模板
基本遍歷:
//dfs
void dfs(int x)
{
v[x]=1;
for(int i=head[x];i;i=next[i])
{
int y=ver[i];
if(v[y]) continue;
dfs(y);
}
}
//bfs
void bfs(int x)
{
queue<int>q;
q.push(x);v[x]=1;
while(q.size())
{
int u=q.front();q.pop();
for(int i=head[u];i;i=next[i])
{
int y=ver[i];
if(v[y]) continue;
v[y]=1;
q.push(y);
}
}
}
dfs求樹和圖的信息
//dfs時間戳
void dfs(int x)
{
dfn[x]=++cnt;
v[x]=1;
for(int i=head[x];i;i=next[i])
{
int y=ver[i];
if(v[y]) continue;
dfs(y);
}
}
//dfs序
void dfs(int x)
{
dfsx[++cnt]=x;
v[x]=1;
for(int i=head[x];i;i=next[i])
{
int y=ver[i];
if(v[y]) continue;
dfs(y);
}
dfsx[++cnt]=x;
}
//樹的深度
void dfs(int x)
{
v[x]=1;
for(int i=head[x];i;i=next[i])
{
int y=ver[i];
if(v[y]) continue;
deep[y]=deep[x]+1;
dfs(y);
}
}
//子樹大小+樹的重心
void dfs(int x)
{
size[x]=v[x]=1;
int max_part=0;
for(int i=head[x];i;i=next[i])
{
int y=ver[i];
if(v[y]) continue;
dfs(y);
size[x]+=size[y];
max_part=max(max_part,size[y]);
}
max_part=max(max_part,n-size[x]);
if(max_part<ans)
{
ans=max_part;
pos=x;
}
}
//圖的連通塊劃分
void dfs(int x)
{
v[x]=cnt;
for(int i=head[x];i;i=next[i])
{
int y=ver[i];
if(v[y]) continue;
dfs(y);
}
}
for(int i=1;i<=n;++i)
if(!v[i])
{
++cnt;
dfs(i);
}
bfs求樹和圖的信息
//拓撲排序
void topsort()
{
queue<int>q;
for(int i=1;i<=n;++i)
if(deg[i]==0) q.push(i);
while(q.size())
{
int x=q.front();q.pop();
a[++cnt]=x;
for(int i=head[x];i;i=next[i])
if(--deg[ver[i]]==0) q.push(ver[i]);
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;++i)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
}
topsort();
for(int i=1;i<=cnt;++i)
printf("%d ",a[i]);
return 0;
}
dfs與bfs常用模板的更多相关文章
- DFS普及组常用模板简单整理
一些普及组会用到的DFS模板,其他的DFS我感觉普及组不会用到所以暂且搁着,等之后有时间了再细写w (至于我为什么最近不写TG相关只写最基础的PJ的内容,请戳这里了解) dfs各种模板big集合 1. ...
- Clone Graph leetcode java(DFS and BFS 基础)
题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...
- 邻接矩阵实现图的存储,DFS,BFS遍历
图的遍历一般由两者方式:深度优先搜索(DFS),广度优先搜索(BFS),深度优先就是先访问完最深层次的数据元素,而BFS其实就是层次遍历,每一层每一层的遍历. 1.深度优先搜索(DFS) 我一贯习惯有 ...
- 图的DFS与BFS
图的DFS与BFS(C++) 概述 大一学生,作为我的第一篇Blog,准备记录一下图的基本操作:图的创建与遍历.请大佬多多包涵勿喷. 图可以采用邻接表,邻接矩阵,十字链表等多种储存结构进行储存,这里为 ...
- 【数据结构与算法笔记04】对图搜索策略的一些思考(包括DFS和BFS)
图搜索策略 这里的"图搜索策略"应该怎么理解呢? 首先,是"图搜索",所谓图无非就是由节点和边组成的,那么图搜索也就是将这个图中所有的节点和边都访问一遍. 其次 ...
- NDK(10)Android.mk各属性简介,Android.mk 常用模板
参考 : http://blog.csdn.net/hudashi/article/details/7059006 本文内容: Android.mk简介, 各属性表, 常用Android.mk模板 1 ...
- 数据结构(12) -- 图的邻接矩阵的DFS和BFS
//////////////////////////////////////////////////////// //图的邻接矩阵的DFS和BFS ////////////////////////// ...
- 数据结构(11) -- 邻接表存储图的DFS和BFS
/////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS //////////////// ...
- 在DFS和BFS中一般情况可以不用vis[][]数组标记
开始学dfs 与bfs 时一直喜欢用vis[][]来标记有没有访问过, 现在我觉得没有必要用vis[][]标记了 看代码 用'#'表示墙,'.'表示道路 if(所有情况都满足){ map[i][j]= ...
随机推荐
- $scope里的$watch方法
一.$watch的作用 监听model,如果model发生变化,则触发某些事情. 二.$watch的格式 $scope. $watch(watchFn,watchAction,deepWatch); ...
- Phaser也可以实现countdownLatch的功能
/** * 可用用phaser模拟countDownLatch * awaitAdvance方法:如果传入的参数和当前的phase相等,线程就阻塞住等待phase的值增加:否则就立即返回 */ pub ...
- Rider中Winform开发支持预览(5)
1.Rider .netCore3.0 winform设计器支持预览,这点vs目前还不支持. 2.不过winform下控件选择工具栏都是没有图标的
- 第二十节:Asp.Net Core WebApi生成在线文档
一. 基本概念 1.背景 使用 Web API 时,了解其各种方法对开发人员来说可能是一项挑战. Swagger 也称为OpenAPI,解决了为 Web API 生成有用文档和帮助页的问题. 它具有诸 ...
- WPF 精修篇 长时间线程加取消功能
原文:WPF 精修篇 长时间线程加取消功能 <Grid> <Grid.RowDefinitions> <RowDefinition Height="11*&qu ...
- Math基础使用
/* java.lang.Math类是数学相关的工具类,里面提供的大量静态方法,完成与数学运算的操作 public static double abs(double num):获取绝对值. publi ...
- EF自动创建数据库步骤之四(启用数据库初始器)
在创建完DBIfNotExistsInitializer数据库初始化器类后,需要在程序每一次访问数据库前,告诉EF使用该初始化器进行初始化. 代码如下 : Database.SetInitialize ...
- Django的视图系统:View
一.CBV和FBV FBV:functoin based view,基于函数的view 我们之前写过的都是基于函数的view CBV:class based view,基于类的view 定义CBV: ...
- Using hints for Postgresql
本文转自:http://pghintplan.osdn.jp/pg_hint_plan.html pg_hint_plan 1.1 pg_hint_plan Name Synopsis Descrip ...
- ASM磁盘操作笔记
添加磁盘组 create diskgroup abc normal redundancy failgroup a disk 'ORCL:AAA' name AAA failgroup b disk ' ...