@Moritz
2019-03-29T08:48:29.000000Z
字数 939
阅读 455
蓝桥杯 蓝桥杯第九届 C++ DFS 所有文稿
两次dfs
/*16'34-17:02*/#include <iostream>#include <cmath>#include <string.h>using namespace std;const int maxn=1010;char island[maxn][maxn];bool ma[maxn][maxn],m2[maxn][maxn]={false};int n;void dfs(int y,int x){for(int c=-1;c<=1;c++){for(int r=-1;r<=1;r++){if (r*c==0&&y+r>=0&&y+r<n&&x+c>=0&&x+c<n){if (island[y+r][x+c]=='#'&&!ma[y+r][x+c]){ma[y+r][x+c]=true;dfs(y+r,x+c);}}}}return;}int main(){cin>>n;memset(ma,false,sizeof(ma));for(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>island[i][j];}}int cnt=0;for(int i=0;i<n;i++){for(int j=0;j<n;j++){if (island[i][j]=='#'&&!ma[i][j]){cnt++;ma[i][j]=true;dfs(i,j);}}}for(int i=0;i<n;i++){for(int j=0;j<n;j++){if (!ma[i][j]){for(int c=-1;c<=1;c++){for(int r=-1;r<=1;r++){if (r*c==0&&i+r>=0&&i+r<n&&j+c>=0&&j+c<n){island[i+r][j+c]='.';}}}}}}cnt=0;memset(ma,false,sizeof(ma));for(int i=0;i<n;i++){for(int j=0;j<n;j++){if (island[i][j]=='#'&&!ma[i][j]){cnt++;ma[i][j]=true;dfs(i,j);}}}cout<<cnt;return 0;}
2019.3.3
