题目连接
思路:dfs搜索,因为数据量较大,须要剪枝
定义row和col两个数组,若是炸弹爆炸,则炸弹所在的row和col记为1
虽然求最少的炸弹引爆数,可是由于炸弹是连锁的,因此遍历便可ios
#include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <iostream> #include <cmath> #include <vector> #include <map> #include <set> #include <stack> #include <queue> using namespace std; typedef long long ll; const int MAX=0x3f3f3f3f; const int N=1010; char a[N][N]; int n,m; int row[N],col[N]; void dfs(int x,int y){ a[x][y]='0'; if(!row[x]){ row[x]=1; for(int i=0;i<m;i++){ if(a[x][i]=='1'){ // dfs(x,i); } } } if(!col[y]){ col[y]=1; for(int i=0;i<n;i++){ if(a[i][y]=='1'){ dfs(i,y); } } } } int main(){ int cnt=0; scanf("%d%d",&n,&m); for(int i=0;i<n;i++){ scanf("%s",a[i]); } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(a[i][j]=='1'){ dfs(i,j); cnt++; } } } cout<<cnt<<endl; }