题意:
给出 N * M 的矩阵,两点之间的曼哈顿距离小于2视为这两点连通,求连通块个数。
发现这个题目好文艺!于是就做了下,dfs求下连通块个数就好。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int map[124][124];
bool use[124][124];
int n,m;
void dfs(int x,int y)
{
use[x][y] = 0;
for(int i = max(x-2,0) ; i <= x + 2 ; i ++)
for(int j = max(y-2,0) ; j <= y + 2 ; j ++)
if(abs(x-i) + abs(y-j) <= 2 && use[i][j])
dfs(i,j);
}
int main()
{
cin>>n>>m;
scanf("\n");
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= m ; j ++)
{
char c;
scanf("%c\n",&c);
if(c == '#')
use[i][j]=true;
if(c == '-')
use[i][j]=false;
}
int ans = 0;
for(int i = 1 ; i <= n ; i ++)
{
for(int j = 1 ; j <= m ; j ++)
{
if(use[i][j])
{
ans ++;
dfs(i,j);
}
}
}
cout<<ans;
return 0;
}
传送门 : codevs 1293