属于简单题,由题目理解为从最右下角的开始引爆,然后由此引爆的都递归的引爆.而且先引爆上面或先引爆左边的,不影响结果.用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;
}
本文介绍了一个简单的爆炸算法实现,该算法从二维数组的右下角开始触发连锁反应,递归引爆符合条件的元素。文章通过具体的C++代码展示了如何通过递归方式实现这一过程,并强调了使用scanf而非cin可以避免超时问题。

751

被折叠的 条评论
为什么被折叠?



