代码随想录:105、有向图的完全可达性

news/2024/10/4 1:52:07 标签: 深度优先, 算法

105. 有向图的完全可达性

这道题属于简单搜索题,采用bfs即可,也可用dfs但注意要回溯

1、条件准备

graph数组存图,visit数组判断结点是否走过。
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; i++)
using namespace std;
#define endl '\n'

bool graph[105][105];
bool visit[105];
 int n,k;

2、主函数

先存图,建边。然后bfs
再遍历一下结点是否都走过,有没走过输出-1,否则输出1
int main()
{
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
 
  cin>>n>>k;
  rep(i,1,k)
   {
    int a,b;cin>>a>>b;
    graph[a][b]=1;
   }
  bfs(); 
  rep(i,1,n)
  {
    if(!visit[i])
    {
      cout<<"-1";
      return 0;
    }
  }
  cout<<"1";
  
  return 0;
}

3、bfs函数

还是用数组模拟队列,把1放进去。
取队头,遍历该点有无边,并且还没走过,有就加入队列。
void bfs()
{
  int q[105];int tt=-1,hh=0;
  q[++tt]=1;
  visit[1]=1;
  while(hh<=tt)
  {
    int cur=q[hh++];
    rep(i,1,n)
    {
      if(graph[cur][i]&&!visit[i])
      {
        q[++tt]=i;
        visit[i]=1;
      }
    }
  }
}

4、总结

简单搜索题
完整代码如下:
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; i++)
using namespace std;
#define endl '\n'

bool graph[105][105];
bool visit[105];
 int n,k;

void bfs()
{
  int q[105];int tt=-1,hh=0;
  q[++tt]=1;
  visit[1]=1;
  while(hh<=tt)
  {
    int cur=q[hh++];
    rep(i,1,n)
    {
      if(graph[cur][i]&&!visit[i])
      {
        q[++tt]=i;
        visit[i]=1;
      }
    }
  }
}
int main()
{
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
 
  cin>>n>>k;
  rep(i,1,k)
   {
    int a,b;cin>>a>>b;
    graph[a][b]=1;
   }
  bfs(); 
  rep(i,1,n)
  {
    if(!visit[i])
    {
      cout<<"-1";
      return 0;
    }
  }
  cout<<"1";
  
  return 0;
}


http://www.niftyadmin.cn/n/5689279.html

相关文章

leetcode35--搜索插入位置--二分查找刷题

搜索插入位置 一共会出现下面四种情况&#xff1a; 目标值在数组所有元素之前 目标值等于数组中某一个元素 目标值插入数组中的位置 目标值在数组所有元素之后 首先在二分查找的代码之前处理掉目标值在数组所有元素之前和之后的情况如果目标值在数组中的某个位置&#xff0c…

25货拉拉校园招聘面试经验 面试最常见问题总结

货拉拉校园招聘面试经验 目录 【面试经历】 问题+详细答案 面试全流程 【面试经历】 发面经,攒人品。 项目问题: 1.AOP日志落库到数据库,为什么不用一些现成的方案? 2.邀请链接的id怎么用redis生成的? 3.乐观锁保证了奖励的正确发放,请你说说乐观锁的原理。 4.奖…

【BUUCTF N1BOOK】[第一章 web入门]

常见的搜集 这里提示敏感文件 可以想到敏感文件的类型 1.gedit备份文件 格式&#xff1a;filename~ ex.index.php~ 2.vim备份文件 格式&#xff1a;.filename.swap *.swo *.swn ex.index.php.swp 3.robots.txt 可以通过访问每个目录得到flag 也可以使用扫描软件 扫描目录 …

Linux查看触摸坐标点的方法,触觉智能RK3562开发板,瑞芯微、全志等通用

平时遇到键盘、鼠标、触摸板等输入设备无响应等异常情况时&#xff0c;一般通过更换设备判断异常。但在遇到更换正常设备后&#xff0c;输入仍然异常的情况下&#xff0c;可以借助evtest工具查看内核的上报事件信息&#xff0c;协助定位问题所在。 本次使用的是触觉智能EVB356…

win10装机 vs+qt+cuda

1.QT QT插件 Index of /official_releases/vsaddin QT软件 Index of /archive/qt 2. vs vs2019 Visual Studio 2019 生成号和发布日期 | Microsoft Learn vs2022 Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 3.cuda https://developer.nvidia.com/cuda-1…

【ShuQiHere】 从零开始掌握随机森林与极端随机森林:原理、推导与实战

&#x1f31f; 【ShuQiHere】 Mastering Random Forests and Extremely Randomized Trees from Scratch: Theory, Derivations, and Practice 目录 引言背景与基本概念 2.1 机器学习与集成学习概述2.2 弱学习器与强学习器 决策树基础 3.1 决策树的构建原理3.2 信息熵与信息增…

JDBC 快速入门

JDBC 快速入门 搭建步骤代码实现数据库java 代码 搭建步骤 准备数据库官网下载数据库连接驱动jar 包。https://downloads.mysql.com/archives/c-j/创建 java 项目&#xff0c;在项目下创建 lib 文件夹&#xff0c;将下载的驱动 jar 包复制到文件夹里选中 lib 文件夹右键 ->…

性能测试的方式有哪些

静态的性能测试 静态的性能测试(以下简称静态测试)在性能测试中往往比功能测试更加重要&#xff0c;因为很多严重的性能效率方面的缺陷是在系统架构设计阶段引入的&#xff0c;例如系统架构不合理或不均衡&#xff0c;采用了有问题的算法模型等。这些缺陷的引入可能是由于设计…