水池数目
思路:两个for循环,遇到1,sum++,然后把与这个1上下左右连着的1都变为0,四个方向搜索吧
import java.util.Scanner; public class Main{ static int str[][],n,m; public static void main(String[] args) { Scanner input=new Scanner(System.in); int N=input.nextInt(); while(N-->0){ n=input.nextInt(); m=input.nextInt(); str=new int[n][m]; for(int i=0;i<n;i++){ for(int j=0;j<m;j++) str[i][j]=input.nextInt(); } int sum=0; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(str[i][j]==1){ sum++; str[i][j]=0; bfs(i,j); } } } System.out.println(sum); } } private static void bfs(int i, int j) {//搜索,连着的都给变为0 if(i+1<n){ if(str[i+1][j]==1){ str[i+1][j]=0; bfs(i+1,j); } } if(j+1<m){ if(str[i][j+1]==1){ str[i][j+1]=0; bfs(i,j+1); } } if(i-1>=0){ if(str[i-1][j]==1){ str[i-1][j]=0; bfs(i-1,j); } } if(j-1>=0){ if(str[i][j-1]==1){ str[i][j-1]=0; bfs(i,j-1); } } } }