codevs 1293 送给圣诞夜的极光

来源:互联网 发布:小米数据迁移 分身 编辑:程序博客网 时间:2024/05/21 15:07

题意:
给出 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

0 0
原创粉丝点击