hdu 2952 Counting Sleep (深度搜索)

来源:互联网 发布:高性能笔记本 编程 编辑:程序博客网 时间:2024/06/11 09:21

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2952

分析:题目要求求羊的区域个数,就是不相邻的羊有几个区域,相邻算一个。直接从每一个点深度优先搜索,在搜索的过程中,把搜索过的以及所有相邻的点全部更改状态,这样可以不用标记数组,注意需要搜索四个方向。

#include<cstdio>#include<iostream>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;const int N=105;char a[N][N];//存图,直接更改状态即可,不用标记数组int dd[4][2]={0,1,1,0,0,-1,-1,0};int m,n;void dfs(int x,int y){    int i;    for(i=0;i<4;i++)    {        int sx=x+dd[i][0];        int sy=y+dd[i][1];        if(sx>=0&&sx<n && sy>=0 && sy<m && a[sx][sy]=='#')        {            a[sx][sy]='.';            dfs(sx,sy);        }    }}int main(){    int i,j;    int t;    int cnt;    scanf("%d",&t);    while(t--)    {        memset(a,0,sizeof(a));        scanf("%d%d%*c",&n,&m);        for(i=0;i<n;i++)        {            for(j=0;j<m;j++)                scanf("%c",&a[i][j]);            getchar();        }          cnt=0;          for(i=0;i<n;i++)            for(j=0;j<m;j++)            if(a[i][j]=='#')            {                cnt++;                a[i][j]='.';//更改标记,已经访问                dfs(i,j);            }            printf("%d\n",cnt);    }    return 0;}


1 0
原创粉丝点击