2018省赛A组第8题 全球变暖
题目链接http://oj.ecustacm.cn/problem.php?id=1365
思路:连通块问题,DFS即可
#include<iostream>
using namespace std;
int n;
int flag = 0,ans=0;//标记、计数
char a[1010][1010];
bool vis[1010][1010] = {0};
int fx[4][2] = { {0,1},{0,-1},{1,0},{-1,0} };
void dfs(int x, int y) {
vis[x][y] = 1;
if (a[x][y - 1] == '#' && a[x][y + 1] == '#' && a[x + 1][y] == '#' && a[x - 1][y]=='#') {
flag = 1;
}
for (int i = 0; i < 4; i++) {
int xx = x, yy = y;
xx += fx[i][1];
yy += fx[i][0];
if (vis[xx][yy] == 0 && a[xx][yy] == '#')
dfs(xx, yy);
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (a[i][j] == '#' && vis[i][j] == 0) {
flag = 0;
dfs(i, j);
if (flag == 0)
ans++;
}
}
}
cout << ans;
return 0;
}
仅供个人温习
罗老师代码链接https://blog.csdn.net/weixin_43914593/article/details/112851771