为什么我用bfs写的代码超时了呢,通过率只有40%,官方给的题解也是bfs
希望各位指点一下,谢谢
题目


我写的代码
package beikao18;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
//全球变暖
public class GlobalWarm {
public static char[][] map;
public static int ans = 0;
static int[] dr = {1,-1,0,0};
static int[] dc = {0,0,1,-1};
public static Queue<Node> q = new LinkedList<>();
static boolean[][] visted;
static boolean willYanMo;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
map = new char[N][N];
visted= new boolean[N][N];
for (int i = 0; i < N; i++) {
String next = scanner.next();
for (int j = 0; j < N; j++) {
map[i][j] = next.charAt(j);
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N ; j++) {
if(map[i][j] == '#' && visted[i][j] == false){
bfs(i,j);
if(willYanMo == true){
ans++;
}
}
}
}
System.out.println(ans);
}
private static void bfs(int r, int c){
willYanMo = true;
//添加源点
q.add(new Node(r,c));
while (!q.isEmpty()){
//拓展原点
Node n = q.poll();
visted[n.r][n.c] = true;
int flag =0; //标记陆地周围的海水数量
for (int i = 0; i < 4; i++) {
int newR = n.r + dr[i];
int newC = n.c + dc[i];
if(newR >= 0 && newR < map.length && newC >= 0 && newC < map.length && map[newR][newC] == '.'){
flag++;
}
if(newR >= 0 && newR < map.length && newC >= 0 && newC < map.length && map[newR][newC] == '#' && visted[newR][newC] == false){
q.add(new Node(newR,newC));
}
}
if(flag == 0){
willYanMo = false;
}
}
}
static class Node{
int r;
int c;
public Node(int r, int c) {
this.r = r;
this.c = c;
}
}
}