图的深度遍历和广度遍历

简介: 图的深度遍历和广度遍历

实事上,这些遍历问题只是老生常谈的bfs和dfs过程,学习图的时候前面的图的定义和存储都没有讲解,但定义那些初试就学过,这里更注重讲解图的存储,再顺带把其遍历解决。

图的存储有邻接矩阵和邻接表这几种方式,邻接矩阵是个二维数组,邻接表是一个点集加链表的形式,这里我们想用vector来实现邻接表。

为什么vector可以实现邻接表,注意邻接表是点集加链表,为什么加链表是因为链表长度不一定需要确定,恰好vector也是一个可变数组,所以可以定义node后,用vector<node>Adj[N]实现邻接表。特别当题目不涉及权重,只管连通信息时,直接用vector<int>Adj[N]即可模拟邻接表

之后就是基于邻接表的两种遍历

#include<iostream> 
#include<vector>
#include<queue>
using namespace std;
struct node{
  int vex;
  int weight; 
};
vector <node>Adj[1000];//定义邻接表
int n;//结点数 
bool vis[1000];
void dfs(int u) {
    vis[u]=true;
    printf("%d",u);
    for(int i=0;i<Adj[u].size();i++)
{   
    int k=Adj[u][i].vex;
  if(!vis[k])
  dfs(k);
}
} 
void dfstrave() //深度遍历图G
 {
  for(int i=1;i<=n;i++) 
      vis[i]=false;
    for(int i=1;i<=n;i++){
      if(!vis[i])
      dfs(i);
  }
 } 
 void bfs(int u) {
  queue<int>q;
  q.push(u);
  int temp;
  while(!q.empty()){
    temp=q.front();q.pop();
    vis[temp]=true;
    printf("%d",temp);
    for(int i=0;i<Adj[temp].size();i++){
      int k=Adj[u][i].vex;
        if(!vis[k])
           q.push(k);
     }
   }
 }
 void bfstrave() //广度遍历图G
 {
  for(int i=1;i<=n;i++) 
      vis[i]=false;
    for(int i=1;i<=n;i++){
      if(!vis[i])
      dfs(i);
  }
 } 
 int main(){
  return 0;
 }

如果要解决连通分量个数问题在遍历是加入一个数据看调用了几次bfs或dfs即可。

相关文章
|
7月前
|
存储 人工智能 算法
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
454 0
|
6月前
|
存储 C语言
数据结构学习记录——图的遍历(深度优先搜索、广度优先搜索、为什么需要两种遍历、图不连通怎么办)
数据结构学习记录——图的遍历(深度优先搜索、广度优先搜索、为什么需要两种遍历、图不连通怎么办)
72 0
|
7月前
|
存储 算法 搜索推荐
深度优先遍历与广度优先遍历:理解它们的原理与差异
深度优先遍历与广度优先遍历:理解它们的原理与差异
|
算法
用递归的思想实现二叉树前、中、后序迭代遍历
用递归的思想实现二叉树前、中、后序迭代遍历
76 1
|
7月前
|
存储
二叉树遍历(五-最终篇)
二叉树遍历(五-最终篇)
|
算法
广度优先遍历(BFS):逐层探索图的算法奥秘
在图论中,广度优先遍历(Breadth-First Search,BFS)是一种图遍历算法,它以一种逐层的方式探索图的节点。通过从起始节点开始,逐层向外扩展,BFS能够帮助我们解决许多与图相关的问题。
135 0
|
7月前
|
算法 索引
邻接矩阵表示 深度遍历 广度遍历
邻接矩阵表示 深度遍历 广度遍历
37 0
|
存储 索引
树与图中的dfs和bfs—— AcWing 846. 树的重心 AcWing 847. 图中点的层次
树与图中的dfs和bfs—— AcWing 846. 树的重心 AcWing 847. 图中点的层次
81 0
|
算法 UED 容器
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力(上)
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力
129 0
|
算法 容器
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力(下
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力
92 0