题目
该题是dfs的模板题,写的时候主要是在边界上面卡了半天,最后把周围加了一圈保证不出边界,才过的
题意:对于给定的一个数组值找到相邻集合的个数,比较简单,主要是卡在了边界上
AC代码:
import java.io.*;
import java.math.*;
import java.math.BigInteger;
import java.util.*;
public class Main{
public static int m,n;
static char [][]arr;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
for(;;) {
m=sc.nextInt();
n=sc.nextInt();
if(m==0&&n==0)break;
int ans=0;
arr=new char[m+2][n+2];
for(int i=1;i<=m;i++) {
String str=sc.next();
str="*"+str+"*";
arr[i]=str.toCharArray();
}
for(int i=0;i<n+2;i++) {
arr[0][i]='*';
arr[m+1][i]='*';
}
for(int i=1;i<=m;i++) {
for(int j=1;j<=n;j++) {
if(arr[i][j]=='@') {
ans++;
dfs(arr,i,j);
}
}
}
// for(int i=0;i<m+2;i++) {
// System.out.println(Arrays.toString(arr[i]));
// }
System.out.println(ans);
}
}
private static void dfs(char[][] arr, int i, int j) {
if(arr[i][j]!='@' || i<0 || j<0 || i>m || j>n)return;
else {
//System.out.println("qqqqqqqq");
arr[i][j] = '!';
dfs(arr,i-1, j-1);
dfs(arr,i-1, j);
dfs(arr,i-1, j+1);
dfs(arr,i, j-1);
dfs(arr,i, j+1);
dfs(arr,i+1, j-1);
dfs(arr,i+1, j);
dfs(arr,i+1, j+1);
}
}
}