思路:典型水漫法,递归解决
package test;
import java.util.Scanner;
public class Test{
static Scanner sc = new Scanner(System.in);
static String line;
static int max = 5;
static char[][] pic = new char[max][max];//字符矩阵
static int[][] idx = new int[max][max];//标记字符属于哪个八连块
static int cnt = 0;//八连块数目
/**
* 水漫法
* @param r 横坐标
* @param c 纵坐标
* @param id 八连块id
*/
static void dfs(int r,int c,int id){
if(r>=max || r<0 || c>=max || c<0) return;
if(pic[r][c]!='@' || idx[r][c]>0) return;
if(pic[r][c]=='@'){
idx[r][c] = id;
for(int dr=-1;dr<=1;dr++){
for(int dc=-1;dc<=1;dc++){
if(dr!=0||dc!=0) dfs(r+dr,c+dc,id);
}
}
}
}
public static void main(String[] args) {
pic[0][4] = '@';
pic[1][1] = '@';
pic[1][2] = '@';
pic[1][4] = '@';
pic[2][1] = '@';
pic[2][4] = '@';
pic[3][0] = '@';
pic[3][1] = '@';
pic[3][2] = '@';
pic[3][4] = '@';
pic[4][0] = '@';
pic[4][1] = '@';
pic[4][4] = '@';
for(int r=0;r<max;r++){
for(int c=0;c<max;c++){
if(pic[r][c]=='@' && idx[r][c]==0) dfs(r,c,++cnt);
}
}
System.out.println(cnt);
}
}