zju 2922 Bombs

本文介绍了一个简单的爆炸算法实现,该算法从二维数组的右下角开始触发连锁反应,递归引爆符合条件的元素。文章通过具体的C++代码展示了如何通过递归方式实现这一过程,并强调了使用scanf而非cin可以避免超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




属于简单题,由题目理解为从最右下角的开始引爆,然后由此引爆的都递归的引爆.而且先引爆上面或先引爆左边的,不影响结果.用cin估计要超时,scanf不会超时.
#include <iostream>
#include 
<string>
using namespace std;
int m, n;
int a[1001][1001];
void explode(int x, int y)
{
    
int i, j, k;
    
int t = a[x][y];
    a[x][y] 
= 0;
    
for (i=x-1; i>=0--i)
    
{
        
if(a[i][y] > 0)
            explode(i, y);
    }

    
for (j=y-1, k=t; j>=0&&k>0--j,--k)
    
{
        
if(a[x][j] > 0)
            explode(x, j);
    }

}

int main()
{
    
    
int i, j;
    
while (scanf("%d%d",&n, &m) != EOF)
    
{
        
for (i=0; i<n; ++i)
        
{
            
for (j=0; j<m; ++j)
            
{
                scanf(
"%d",&a[i][j]);
            }

        }

        
int cnt = 0;
        
for (i=n-1; i>=0--i)
        
{
            
for (j=m-1; j>=0--j)
            
{
                
if(a[i][j] > 0)
                
{
                    
++cnt;
                    explode(i, j);
            
//        cout << i << " " << j << endl;
                }

            }

        }

        printf(
"%d ", cnt);

    }

    
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值