大家好,又见面了,我是你们的朋友全栈君。
在一个n×m 的方格地图上,某些方格上放置着炸弹。手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去。
第一行输两个整数 n,m用空格隔开。 接下来 n 行,每行输入一个长度为 m 的,表示地图信息。0表示没有炸弹,1表示炸弹。
5 5 00010 00010 01001 10001 01000
样例输出 :2
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
const double PI=acos(-1.0);
int n,m;
int ans;
int a[105][105];
bool vx[105],vy[105];
void dfs(int x,int y){
a[x][y]=0;
if(!vx[x]){
vx[x]=1;
for(int i=0;i<m;i++){
if(a[x][i]==1){
dfs(x,i);
}
}
}
if(!vy[y]){
vx[y]=1;
for(int i=0;i<n;i++){
if(a[i][y]==1){
dfs(i,y);
}
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i][j]==1){
ans++;
dfs(i,j);
}
}
}
cout<<ans;
return 0;
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155191.html原文链接:https://javaforall.cn