思路:看到题的时候,首先想到了八连通问题,有相似的部分。
import java.util.Scanner;
public class Main{
static int ans;
static int dx[]= {-1,0,1,0 };
static int dy[]= {0,1,0,-1 };
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
sc.nextLine();
char [][]table = new char[n][];
for(int i=0;i<n;i++)
table[i] = sc.nextLine().toCharArray();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(table[i][j] == '@')
dfs(table,i,j,n,m);
}
}
System.out.println(ans+1);
}
private static void dfs(char[][] table, int i, int j,int n,int m) {
if(i < 0 || i >= n || j < 0|| j >= m || table[i][j]=='#'){
return;
}
if (i >= 0 && i < n && j >= 0 && j < m && table[i][j] == '.') {
table[i][j]='#';
ans++;
}
for(int u=0;u<4;u++){
int tx=i+dx[u];
int ty=j+dy[u];
dfs(table,tx,ty,n,m);
}
}
}