引爆最多的炸弹-c语言dfs递归做法
引爆最多的炸弹
给你一个炸弹列表。一个炸弹的 爆炸范围 定义为以炸弹为圆心的一个圆。
炸弹用一个下标从 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递归做法相关推荐
- LeetCode 2101. 引爆最多的炸弹(图的遍历)
文章目录 1. 题目 2. 解题 1. 题目 给你一个炸弹列表.一个炸弹的 爆炸范围 定义为以炸弹为圆心的一个圆. 炸弹用一个下标从 0 开始的二维整数数组 bombs 表示,其中 bombs[i] ...
- 2022-05-17:在一个地图上有若干个炸弹,每个炸弹会呈现十字型引爆。 每个炸弹都有其当量值,这个值决定了这个炸弹的爆炸半径。 如果一个炸弹被引爆时,有其它炸弹在其爆炸半径内,那么其它炸弹也会爆炸
2022-05-17:在一个地图上有若干个炸弹,每个炸弹会呈现十字型引爆. 每个炸弹都有其当量值,这个值决定了这个炸弹的爆炸半径. 如果一个炸弹被引爆时,有其它炸弹在其爆炸半径内,那么其它炸弹也会爆炸 ...
- C语言DFS算法的实现(附完整源码)
C语言DFS算法的实现 C语言DFS算法的实现完整源码(定义,实现,main函数测试) C语言DFS算法的实现完整源码(定义,实现,main函数测试) #include <iostream> ...
- C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质...
C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质 事情的经过是这种,博主在用C写一个简单的业务时使用递归,因为粗心而忘了写return.结果发现返回的结 ...
- C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈
C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈 分享到: QQ空间 新浪微博 腾讯微博 豆瓣 人人网 递归是一种强有力的技巧,但和其他技巧一样,它也可能被误用. 一般需要递归解决的问题有两个特 ...
- 统计c语言中英文字幕,C语言日记——递归
C语言日记--递归 首先,允许我从<c primer plus>中摘一句话:C允许函数调用它自己,这种调用称为递归. 有一段时间一直搞不清楚递归的实质,直到看到如下代码: #include ...
- C语言入门——递归(思想简要讲解+简单递归练习)
C语言入门--递归(简要讲解+递归练习) 递归定义: 程序调用自身的编程技巧称为递归( recursion). 递归从字面上我们可以理解为: 递去+归来 如下图 使用递归的目的: 简要:简化代码量,方 ...
- 什么叫c语言函数递归,什么是递归-C语言函数递归-嗨客网
C语言函数递归教程 函数递归就是一个 C语言函数递归条件 执行一个函数时,就创建一个新的受保护的独立空间(新函数栈). 函数的局部 递归必须向退出递归的条件逼近,否则就是无限递归了. 当一个函数执行完 ...
- R语言基于递归特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection)
R语言基于递归特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可 ...
最新文章
- ADAS车辆在行人安全方面得分很低
- Android Json生成及解析实例
- 计算机控制实验教程,新)《计算机控制技术》实验教程.doc
- 关于“中国大妈”的用户画像
- ITK:相互信息仿射
- 嵌套 思维导图_Python 这方面,8张思维导图助你转身变大牛!
- 使用SAP Cloud Platform Leonardo机器学习的测试控制台
- qdialog 只有点击才能获得焦点_4 个突破点,让你的 Banner 点击率提升10倍
- 最长配对(51Nod-2494)
- java常用的网关有哪几种_拼多多java开发一面、二面合并面经
- MySQL 主主同步配置和主从配置步骤
- Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg'
- 直播用的计算机配置,直播吃鸡需要什么配置才行?
- 毕业设计 : 中文文本分类 ( 机器学习 和 深度学习 ) - 新闻分类 情感分类 垃圾邮件分类
- 机器学习因子:在线性因子模型中捕捉非线性
- matlab无限长一维原子链,固体物理 03-03一维双原子链
- git解决拉取代码本地代码未提交
- 【传输层01】传输层概述
- 20155305乔磊2016-2017-2《Java程序设计》第二周学习总结
- 塞尔达传说——黄昏公主的几个障碍