题目链接:用户登录
感觉上是一道比较简单的基础搜索题
本题的题眼就是没有被淹没的陆地的寻找方法;只要解决了这个就可以根据深度搜索做出来了
其实就是判断这个陆地的周围有没有被其他陆地包围,如果被其他陆地包围了,就不可能被淹没所以这一整块的陆地就不会被完全淹没。。
也就是这句:if (a[x][y]=='#'&&a[x+1][y]=='#'&&a[x][y+1]=='#'&&a[x-1][y]=='#'&&a[x][y-1]=='#')
import java.util.Scanner; public class p1008 { static char[][] a=new char [1020][1020]; static int [][] b=new int [1020][1020]; static int[] d1={0,1,-1,0}; static int[] d2={-1,0,0,1}; static int n; static boolean flag=true; public static void dfs(int x,int y){ if (x<0||x>=n||y<0||y>=n||a[x][y]=='.') { return ; } b[x][y] = 1; if (a[x][y]=='#'&&a[x+1][y]=='#'&&a[x][y+1]=='#'&&a[x-1][y]=='#'&&a[x][y-1]=='#') flag=false; for(int i=0;i<4;i++){ int dx=x+d1[i]; int dy=y+d2[i]; if (b[dx][dy]==0) dfs(dx,dy); } } public static void main(String[] args) { Scanner sc=new Scanner(System.in); n=sc.nextInt(); for (int i=0;i<n;i++){ String s=sc.next(); a[i]=s.toCharArray(); } int num=0; for (int i=0;i<n;i++){ for(int j=0;j<n;j++){ if (a[i][j]=='#'&&b[i][j]==0){ dfs(i,j); if (flag) { num++; }else flag=true; } } } System.out.println(num); } }