图的深度遍历和广度遍历

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

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

相关文章
|
2月前
|
存储 人工智能 算法
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
67 0
|
算法 C语言 C++
二叉树三种遍历(动态图+代码深入理解)
二叉树三种遍历(动态图+代码深入理解)
965 0
二叉树三种遍历(动态图+代码深入理解)
数据结构实验之图论二:图的深度遍历
数据结构实验之图论二:图的深度遍历
|
2月前
|
算法 索引
邻接矩阵表示 深度遍历 广度遍历
邻接矩阵表示 深度遍历 广度遍历
16 0
|
9月前
|
算法
广度优先遍历(BFS):逐层探索图的算法奥秘
在图论中,广度优先遍历(Breadth-First Search,BFS)是一种图遍历算法,它以一种逐层的方式探索图的节点。通过从起始节点开始,逐层向外扩展,BFS能够帮助我们解决许多与图相关的问题。
78 0
|
11月前
|
算法 容器
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力(下
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力
60 0
|
11月前
|
算法 UED 容器
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力(上)
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力
86 0
|
12月前
|
存储 算法
【数据结构】图以及图的遍历(深度遍历和广度遍历)
【数据结构】图以及图的遍历(深度遍历和广度遍历)
146 0
|
12月前
|
存储 编译器
二叉树的递归遍历与迭代遍历(图示)
本文将讲述二叉树递归与迭代的相关知识。
86 0
|
12月前
如何根据二叉树的两种遍历方式重建二叉树(理论篇)
如何根据二叉树的两种遍历方式重建二叉树(理论篇)
69 0