样例输入
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
样例输出
2
代码实现
import java.util.Scanner;
public class Main {
//存放是否有油
static String a[];
static char b[][];
//存放判断
static int idx[][];
//行列数
static int m,n;
//计数油田数
static int s;
public static void solve(int r,int c,int id) {
//超出数组,遍历完毕
if(r<0||r>=m||c<0||c>=n)
return ;
//都已经判断完成,或者没有油
if(idx[r][c]>0||b[r][c]!='@')
return ;
idx[r][c] = id;
//遍历八个方向,除了自己
for(int dr=-1;dr<=1;dr++)
for(int dc=-1;dc<=1;dc++) {
if(dr!=0||dc!=0)
solve(r+dr,c+dc,id);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
m = sc.nextInt();
n = sc.nextInt();
a = new String[101];
b = new char[101][101];
idx = new int[101][101];
s = 0;
for (int i = 0; i < m; i++)
a[i] = sc.next();
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++) {
idx[i][j] = 0;
b[i] = a[i].toCharArray();
}
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++) {
if(idx[i][j]==0&&b[i][j]=='@')
//没有遍历并且有油
//遍历其他八个方向
solve(i,j,++s);
}
System.out.println(s);
}
}
}
主要是字符数组的输入问题。字符串不行,(就是输入字符串,然后取第几个)像字符数组不行,不是字符数组不行。