2018省赛A组第8题
吐槽
好难啊!!!!
#include<bits/stdc++.h> using namespace std; char maps[1001][1001]; int n; bool flag=false;//标记这个岛是否被完全淹没 int vis[1001][1001]={0};//0表示没搜过 int dir[4][2]={ {0,1}, {0,-1}, {1,0}, {-1,0} }; void input() { cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>maps[i][j]; } } } bool check(int x,int y) { return x>=1&&x<=n&&y>=1&&y<=n&&vis[x][y]==0&&maps[x][y]=='#'; } void dfs(int x,int y) { vis[x][y]=1; if(maps[x][y+1]=='#'&&maps[x][y-1]=='#'&&maps[x-1][y]=='#'&&maps[x+1][y]=='#') flag=1; for(int i=0;i<4;i++){ int next_x=x+dir[i][0]; int next_y=y+dir[i][1]; if(check(next_x,next_y)){ dfs(next_x,next_y); } } } void get_result() { int ans=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(maps[i][j]=='#'&&vis[i][j]==0){ flag=0; dfs(i,j); if(flag==0) ans++; } } } cout<<ans; } int main() { input(); get_result(); return 0; }