引爆最多的炸弹

给你一个炸弹列表。一个炸弹的 爆炸范围 定义为以炸弹为圆心的一个圆。

炸弹用一个下标从 0 开始的二维整数数组 bombs 表示,其中 bombs[i] = [xi, yi, ri] 。xi 和 yi 表示第 i 个炸弹的 X 和 Y 坐标,ri 表示爆炸范围的 半径 。

你需要选择引爆 一个 炸弹。当这个炸弹被引爆时,所有 在它爆炸范围内的炸弹都会被引爆,这些炸弹会进一步将它们爆炸范围内的其他炸弹引爆。

给你数组 bombs ,请你返回在引爆 一个 炸弹的前提下,最多 能引爆的炸弹数目。


输入:bombs = [[2,1,3],[6,1,4]]
输出:2
解释:
上图展示了 2 个炸弹的位置和爆炸范围。
如果我们引爆左边的炸弹,右边的炸弹不会被影响。
但如果我们引爆右边的炸弹,两个炸弹都会爆炸。
所以最多能引爆的炸弹数目是 max(1, 2) = 2 。

输入:bombs = [[1,1,5],[10,10,5]]
输出:1
解释:
引爆任意一个炸弹都不会引爆另一个炸弹。所以最多能引爆的炸弹数目为 1 。

输入:bombs = [[1,2,3],[2,3,1],[3,4,2],[4,5,3],[5,6,4]]
输出:5
解释:
最佳引爆炸弹为炸弹 0 ,因为:

  • 炸弹 0 引爆炸弹 1 和 2 。红色圆表示炸弹 0 的爆炸范围。
  • 炸弹 2 引爆炸弹 3 。蓝色圆表示炸弹 2 的爆炸范围。
  • 炸弹 3 引爆炸弹 4 。绿色圆表示炸弹 3 的爆炸范围。
    所以总共有 5 个炸弹被引爆。
    代码实现如下所示:
int  dfs(int** bombs, int bombsSize,int x,int y,int r,int *a,int index){int i,j;int n=0;float pi=3.1415926;int x1,y1;//  printf("index %d ",index);a[index]=1;for(i=0;i<bombsSize;i++){if(i!=index&&a[i]==0){x1=bombs[i][0];y1=bombs[i][1]; long long d1=x1-x,d2=y-y1;//   printf("d1,d2  %d %d ",d1,d2);long long  d3=d1*d1+d2*d2;double d=d3;d=sqrt(d);//  printf(" d %f ",d);if(d<=r){a[i]=1;n++;n=n+dfs(bombs,bombsSize,x1,y1,bombs[i][2],a,i);}}}return n;
}int maximumDetonation(int** bombs, int bombsSize, int* bombsColSize){int a[bombsSize];int i,j;int rz[bombsSize];// if(bombsSize>90) return 10;for(j=0;j<bombsSize;j++){for(i=0;i<bombsSize;i++){a[i]=0;}rz[j]=dfs(bombs,bombsSize,bombs[j][0],bombs[j][1],bombs[j][2],a,j)+1;}int max=rz[0];for(j=1;j<bombsSize;j++){if(rz[j]>max){max=rz[j];}}return max;}

引爆最多的炸弹-c语言dfs递归做法相关推荐

  1. LeetCode 2101. 引爆最多的炸弹(图的遍历)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个炸弹列表.一个炸弹的 爆炸范围 定义为以炸弹为圆心的一个圆. 炸弹用一个下标从 0 开始的二维整数数组 bombs 表示,其中 bombs[i] ...

  2. 2022-05-17:在一个地图上有若干个炸弹,每个炸弹会呈现十字型引爆。 每个炸弹都有其当量值,这个值决定了这个炸弹的爆炸半径。 如果一个炸弹被引爆时,有其它炸弹在其爆炸半径内,那么其它炸弹也会爆炸

    2022-05-17:在一个地图上有若干个炸弹,每个炸弹会呈现十字型引爆. 每个炸弹都有其当量值,这个值决定了这个炸弹的爆炸半径. 如果一个炸弹被引爆时,有其它炸弹在其爆炸半径内,那么其它炸弹也会爆炸 ...

  3. C语言DFS算法的实现(附完整源码)

    C语言DFS算法的实现 C语言DFS算法的实现完整源码(定义,实现,main函数测试) C语言DFS算法的实现完整源码(定义,实现,main函数测试) #include <iostream> ...

  4. C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质...

    C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质 事情的经过是这种,博主在用C写一个简单的业务时使用递归,因为粗心而忘了写return.结果发现返回的结 ...

  5. C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

    C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈 分享到: QQ空间 新浪微博 腾讯微博 豆瓣 人人网 递归是一种强有力的技巧,但和其他技巧一样,它也可能被误用. 一般需要递归解决的问题有两个特 ...

  6. 统计c语言中英文字幕,C语言日记——递归

    C语言日记--递归 首先,允许我从<c primer plus>中摘一句话:C允许函数调用它自己,这种调用称为递归. 有一段时间一直搞不清楚递归的实质,直到看到如下代码: #include ...

  7. C语言入门——递归(思想简要讲解+简单递归练习)

    C语言入门--递归(简要讲解+递归练习) 递归定义: 程序调用自身的编程技巧称为递归( recursion). 递归从字面上我们可以理解为: 递去+归来 如下图 使用递归的目的: 简要:简化代码量,方 ...

  8. 什么叫c语言函数递归,什么是递归-C语言函数递归-嗨客网

    C语言函数递归教程 函数递归就是一个 C语言函数递归条件 执行一个函数时,就创建一个新的受保护的独立空间(新函数栈). 函数的局部 递归必须向退出递归的条件逼近,否则就是无限递归了. 当一个函数执行完 ...

  9. R语言基于递归特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection)

    R语言基于递归特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可 ...

最新文章

  1. ADAS车辆在行人安全方面得分很低
  2. Android Json生成及解析实例
  3. 计算机控制实验教程,新)《计算机控制技术》实验教程.doc
  4. 关于“中国大妈”的用户画像
  5. ITK:相互信息仿射
  6. 嵌套 思维导图_Python 这方面,8张思维导图助你转身变大牛!
  7. 使用SAP Cloud Platform Leonardo机器学习的测试控制台
  8. qdialog 只有点击才能获得焦点_4 个突破点,让你的 Banner 点击率提升10倍
  9. 最长配对(51Nod-2494)
  10. java常用的网关有哪几种_拼多多java开发一面、二面合并面经
  11. MySQL 主主同步配置和主从配置步骤
  12. Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg'
  13. 直播用的计算机配置,直播吃鸡需要什么配置才行?
  14. 毕业设计 : 中文文本分类 ( 机器学习 和 深度学习 ) - 新闻分类 情感分类 垃圾邮件分类
  15. 机器学习因子:在线性因子模型中捕捉非线性
  16. matlab无限长一维原子链,固体物理 03-03一维双原子链
  17. git解决拉取代码本地代码未提交
  18. 【传输层01】传输层概述
  19. 20155305乔磊2016-2017-2《Java程序设计》第二周学习总结
  20. 塞尔达传说——黄昏公主的几个障碍

热门文章

  1. 约瑟夫环--C语言解析
  2. mysql--Galera集群
  3. “黑色星期五”是怎样成为美国传统的?
  4. excel/csv文件单页最大能存多少行呢?
  5. clover 显卡注入功能详细讲解
  6. 通过 Windows 用户模式回调实施的内核攻击
  7. 7-7 顺序 - wifi密码 (100 分)
  8. 传奇脚本显示服务器开区时间代码,传奇时间拓展之定时器脚本命令解释与使用...
  9. JQuery创建文档碎片
  10. Java导出主表和明细Excel