图的深度遍历和广度遍历

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

实事上,这些遍历问题只是老生常谈的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即可。

相关文章
|
算法 C语言 C++
二叉树三种遍历(动态图+代码深入理解)
二叉树三种遍历(动态图+代码深入理解)
1384 0
二叉树三种遍历(动态图+代码深入理解)
|
10天前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
19 2
|
6月前
|
存储 人工智能 算法
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
398 0
|
5月前
|
存储 算法 数据可视化
LeetCode 130题详解:深度优先搜索与广度优先搜索解决被围绕的区域
LeetCode 130题详解:深度优先搜索与广度优先搜索解决被围绕的区域
|
5月前
|
存储 C语言
数据结构学习记录——图的遍历(深度优先搜索、广度优先搜索、为什么需要两种遍历、图不连通怎么办)
数据结构学习记录——图的遍历(深度优先搜索、广度优先搜索、为什么需要两种遍历、图不连通怎么办)
61 0
|
6月前
|
存储 算法 搜索推荐
深度优先遍历与广度优先遍历:理解它们的原理与差异
深度优先遍历与广度优先遍历:理解它们的原理与差异
|
6月前
|
存储
二叉树遍历(五-最终篇)
二叉树遍历(五-最终篇)
|
6月前
|
算法 索引
邻接矩阵表示 深度遍历 广度遍历
邻接矩阵表示 深度遍历 广度遍历
35 0
|
算法 容器
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力(下
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力
86 0
|
算法 UED 容器
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力(上)
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力
119 0