DFS&BFS板子
2017-08-24 16:22
253 查看
十一、深度优先搜索
void dfs(int x) \\以图的深度优先遍历为例。
{
cout<<x<<‘ ‘; \\访问x顶点
visited[x]=1; \\作已访问的标记
for(int k=1;k<=n;k++) \\对与顶点x相邻而又没访问过的结点k进行深度优先搜索。
if((a[x][k]==1)&&(visited[k]==0))
dfs(k);
}
十二、广度优先搜索
void bfs(void) //按广度优先非递归遍历图G,n个顶点,编号为1..n。注:图不一定是连通的
{//使用辅助队列Q和访问标记数组visited。
for(v=1;v<=n;v++) visited[v]=0;//标记数组初始化
for(v=1; v<=n; v++)
if(visited[v]==0 ) { //v尚未访问
int h=1,r=1; //置空的辅助队列q
visited[v]=1;//顶点v,作访问标记
cout<<v<<‘ ‘; //访问顶点v
q[r]=v; //v入队列
while(h<=r) //当队列非空时循环
{
int tmp=q[h]; //队头元素出队,并赋值给tmp
for(int j=1;j<=n;j++)
if((visited[j]==0)&&(a[tmp][j]==1))
{//j为tmp的尚未访问的邻接顶点
visited[j]=1; 对j作访问标记
cout<<j<<‘ ‘; 访问j
r++; //队尾指针加1
q[r]=j; //j入队
} //end-if
h++;
}//end -while
}
void dfs(int x) \\以图的深度优先遍历为例。
{
cout<<x<<‘ ‘; \\访问x顶点
visited[x]=1; \\作已访问的标记
for(int k=1;k<=n;k++) \\对与顶点x相邻而又没访问过的结点k进行深度优先搜索。
if((a[x][k]==1)&&(visited[k]==0))
dfs(k);
}
十二、广度优先搜索
void bfs(void) //按广度优先非递归遍历图G,n个顶点,编号为1..n。注:图不一定是连通的
{//使用辅助队列Q和访问标记数组visited。
for(v=1;v<=n;v++) visited[v]=0;//标记数组初始化
for(v=1; v<=n; v++)
if(visited[v]==0 ) { //v尚未访问
int h=1,r=1; //置空的辅助队列q
visited[v]=1;//顶点v,作访问标记
cout<<v<<‘ ‘; //访问顶点v
q[r]=v; //v入队列
while(h<=r) //当队列非空时循环
{
int tmp=q[h]; //队头元素出队,并赋值给tmp
for(int j=1;j<=n;j++)
if((visited[j]==0)&&(a[tmp][j]==1))
{//j为tmp的尚未访问的邻接顶点
visited[j]=1; 对j作访问标记
cout<<j<<‘ ‘; 访问j
r++; //队尾指针加1
q[r]=j; //j入队
} //end-if
h++;
}//end -while
}
相关文章推荐
- 图的遍历(最小转机数)——dfs&&bfs
- Clone Graph BFS & DFS
- DFS&BFS--最大乘积
- 网络流之最大流-Ford-Fullkerson算法 DFS && BFS
- DFS&&BFS Search Graph
- DFS & BFS
- NYOJ 58 最小步数(BFS && DFS)
- 【HDU】-1241-Oil Deposits(DFS || BFS&&队列)
- DFS && BFS 最少步数(nyoj 58)
- SDUT_2015寒假集训_BFS&DFS_D-找朋友
- SDUT:找朋友 BFS&&DFS
- DFS & BFS
- 【Leetcode】 200. Number of Islands DFS & BFS
- POJ2965 The Pilots Brothers' refrigerator (精妙方法秒杀DFS BFS)
- CH Round #72树洞[二分答案 DFS&&BFS]
- HDU 1241 Oil Deposits【dfs&bfs】
- DFS&BFS入门
- 博弈搜索练习-BFS&DFS
- BFS & DFS的基础学习
- 数据结构 - 图的存储结构表示及其遍历 (DFS && BFS)