图的深度遍历和广度遍历

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

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

相关文章
|
存储 XML 数据可视化
通用仓库元模型概述
通用仓库元模型(Common Warehouse metamodel,CWM)指定了可用于在分布式异构环境中的仓库工具、仓库平台和仓库元数据存储库之间轻松交换仓库和商业智能元数据的接口。
1110 0
通用仓库元模型概述
|
消息中间件 存储 监控
自顶向下学习 RocketMQ(十):消息重投和消息重试
生产者在发送消息时,同步消息失败会重投,异步消息有重试,oneway 没有任何保证。消息重投保证消息尽可能发送成功、不丢失,但可能会造成消息重复,消息重复在 RocketMQ 中是无法避免的问题。消息重复在一般情况下不会发生,当出现消息量大、网络抖动,消息重复就会是大概率事件。另外,生产者主动重发、consumer 负载变化也会导致重复消息。
自顶向下学习 RocketMQ(十):消息重投和消息重试
|
消息中间件 存储 监控
五分钟快速了解Airflow工作流
简介 Airflow是一个以编程方式创作、调度和监控工作流的平台。 使用 Airflow 将工作流创作为有向无环图(DAG)任务。 Airflow 调度程序按照你指定的依赖项在一组workers上执行您的任务。同时,Airflow拥有丰富的命令行实用程序使得在DAG上进行复杂的诊断变得轻而易举。并且提供了丰富的用户界面使可视化生产中运行的工作流、监控进度和需要排查问题时变得非常容易。 当工作流被定义为代码时,它们变得更易于维护、可版本化、可测试和协作。
|
消息中间件 RocketMQ 存储
|
消息中间件 Java API
Flowable 7.0.0 release
Flowable 7.0.0 release
589 1
|
消息中间件 Shell 数据处理
rocket mq 查看消费进度,消息堆积,清除堆积数据命令
该内容是关于RocketMQ的消费进度管理和堆积数据处理的指导。首先,需进入RocketMQ的bin目录,然后使用`mqadmin consumerProgress`命令查看消费者或生产者的消费进度。`broker offset`和`consumer offset`的差值表示未消费消息。通过`resetOffsetByTime`命令可重置消费位点来清除堆积数据,未消费消息默认3天后会被丢弃。此外,`CONSUME_FROM WHERE`枚举类定义了消费起点选项,包括从最后、最开始或指定时间点消费。
3915 3
|
消息中间件 缓存 NoSQL
高并发系统深度优化
高并发系统深度优化
535 0
|
传感器 监控 物联网
阿里云IoT HaaS 510:快速实现物联网数据传输的利器
众所周知,物联网(IoT)是近年来日益热门的技术领域之一,它的广泛应用为人们的生活和工作带来了无限可能。在物联网应用中,数据的采集和传输是至关重要的一环。DTU是一种应用于物联网数据传输的终端设备,它可以将各类传感器、数据采集单元等通过串口RS232/485传输到DTU,再由DTU转发到4G网络上传至云端。阿里云IoT HaaS 510是一款开板式DTU产品,能够帮助企业快速搭建物联网平台,并实现数据的采集和传输,那么本文就来简单分享一下。
709 1
阿里云IoT HaaS 510:快速实现物联网数据传输的利器
PS解决取色器不能粘贴颜色码(重置取色器)
PS解决取色器不能粘贴颜色码(重置取色器)
601 1
|
消息中间件 负载均衡 JavaScript
RocketMQ源码中,7种导致重复消费的坑!
RocketMQ源码中,7种导致重复消费的坑!