P1051送給聖誕夜的極光 RE演算法
#include<string.>
using namespace std;
const int MAXN = 1000 + 50;
// const char L = '#';
int vis[MAXN][MAXN];
int map[MAXN][MAXN];
void dfs(int x, int y)
{
if(vis[x][y] || map[x][y] == 0) return;
vis[x][y] = 1;
dfs(x + 1, y);
dfs(x + 2, y);
dfs(x - 1, y);
dfs(x - 2, y);
dfs(x, y + 1);
dfs(x, y + 2);
dfs(x, y - 1);
dfs(x, y - 2);
dfs(x + 1, y + 1);
dfs(x - 1, y - 1);
dfs(x + 1, y - 1);
dfs(x - 1, y + 1);
}
int main()
{
int n, m;
char s[MAXN];
int i, j;
int count = 0;
scanf("%d %d", &n, &m);
for(i = 0; i < n; i++)
{
scanf("%s", s);
for(j = 0; j < m; j++)
{
if(s[j]== '#')
map[i + 1][j + 1] = 1;
}
}
/*for(i = 0; i <= n; i++)
for(j = 0; j <= m; j++)
{
printf("%d", map[i][j]);
} */
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
{
if(!vis[i][j] && map[i][j] == 1)
{
dfs(i,j);
count++;
}
}
printf("%d", count);
return 0;
}