题目描述:
在一个 n×m 的方格地图上,某些方格上放置着炸弹。手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去。
现在为了引爆地图上的所有炸弹,需要手动引爆其中一些炸弹,为了把危险程度降到最低,请算出最少手动引爆多少个炸弹可以把地图上的所有炸弹引爆。
核心思路:利用DFS
代码如下:
#include<stdio.h>
char a[510][510];
int n, m;
int cnt = 0;
int in(int i, int j)
{
return i >= 1 && i <= n && j >= 1 && j <= m;
}
void dfs(int i, int j)
{
a[i][j] = '0';
for (int p = 1; p <= m; p++) {
if (a[i][p] == '1')dfs(i, p);
}
for (int q = 1; q <= n; q++) {
if (a[q][j] == '1')dfs(q, j);
}
}
int main()
{
scanf("%d %d ", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%s", &a[i][1]);
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (a[i][j] == '1') {
cnt++;
dfs(i, j);
}
}
}
printf("%d", cnt);
return 0;
}