HDU 2952 Counting Sheep (DFS找联通块)

题目链接:请戳这里。   题目大意及思路:读懂题意就好了,就是DFS找联通块。

没什么好说的,见代码吧。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 100+5
using namespace std;

int n,m;
char g[N][N];
int dir[4][2]={1,0,0,1,-1,0,0,-1};
void dfs(int x,int y)
{
    for(int i=0;i<4;i++)
    {
        int nx=x+dir[i][0],ny=y+dir[i][1];
        if(nx>=0 && nx<n && ny>=0 && ny<m && g[nx][ny]=='#')
        {
            g[nx][ny]='.';  //这里就将‘#’改成‘.’,表示已经访问。
            dfs(nx,ny);
        }
    }
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
            scanf("%s",&g[i]);
        int ans=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(g[i][j]=='#')
                {
                    g[i][j]='.';
                    dfs(i,j);     //每一遍dfs后,ans就++。
                    ans++;
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-10-05 23:14:08

HDU 2952 Counting Sheep (DFS找联通块)的相关文章

hdu 2952 Counting Sheep

题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2952 Counting Sheep Description A while ago I had trouble sleeping. I used to lie awake, staring at the ceiling, for hours and hours. Then one day my grandmother suggested I tried counting sheep after I'

【dfs模板】dfs找联通块分区

题目描述 天文学家Doctor博士发明了一种太空分区方法,在这个方法中,宇宙里亮度相近的区域被划为同一个星区.空间中相邻两区域若亮度差不大于给定整数M,则这两区域属于同一星区.现给你一个空间的三维坐标图,每个坐标整点表示一个区域,其值表示其亮度,而其上.下.左.右.前.后六个区域被认为是与其相邻的.请你计算一下该空间内的星区数量. 输入 第一行三个正整数x.y.z(x.y.z<=50),表示空间的长宽高.第二行一个整数M.接下来为一行,x*y*z个0~255的整数,按照空间坐标大小的顺序由小到大

HDOJ 2952 Counting Sheep

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2952 Counting Sheep Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2231    Accepted Submission(s): 1474 Problem Description A while ago I had tro

HDUJ 2952 Counting Sheep 搜索

Counting Sheep Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2039    Accepted Submission(s): 1342 Problem Description A while ago I had trouble sleeping. I used to lie awake, staring at the c

hdu1198Farm Irrigation(dfs找联通)

题目链接: 啊哈哈,选我选我 思路是:首先根据图像抽象出联通关系..首先确定每一种图形的联通关系,用01值表示不连通与不连通...然后从第1个图形进行dfs搜索.如果碰到两快田地可以联通的话那么标记..注意处理的过程中你的 搜索顺序要和你的每个图形的连通性的顺序相同..然后就是最后看上下.左右能否匹配...看最后有几个不同的快,这就是答案,感觉跟并查集一样..并查集应该也可以做.. 题目: Farm Irrigation Time Limit: 2000/1000 MS (Java/Others

利用DFS求联通块个数

/*572 - Oil Deposits ---DFS求联通块个数:从每个@出发遍历它周围的@.每次访问一个格子就给它一个联通编号,在访问之前,先检查他是否 ---已有编号,从而避免了一个格子重复访问多次 --*/ #define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<string.h> #include<algorithm> using namespace std; const int maxn =

【紫书】Oil Deposits UVA - 572 dfs求联通块

题意:给你一个地图,求联通块的数量. 题解: for(所有还未标记的'@'点) 边dfs边在vis数组标记id,直到不能继续dfs. 输出id及可: ac代码: #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include<stdio.h> #include<algorithm> #include<string> #include<vector> #include<list&

uva 11853 Paintball dfs找连通块

题意: 给出一个矩形湖, 湖里面有一些圆形地小岛, 问能否从左岸乘船到达右岸,如果能,找出最上面的起点和终点. 题解: 如果能从左岸到达右岸,那么一定不能存在一个连通的岛屿从上岸连到下岸, 所以直接从上到下做dfs,判断是否存在从上岸到下岸地连通块,完成判断.那么接下来就是如何找出最上方地点了,画画图便发现,对于起点,如果存在跨越上岸和左岸地连通岛屿,那么起点一定只能在左岸地交点下方,所以,只需在dfs的过程中更新起点和终点位置即可. 代码: #include <queue> #include

hdu 3887 Counting Offspring dfs序+树状数组

Counting Offspring Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description You are given a tree, it’s root is p, and the node is numbered from 1 to n. Now define f(i) as the number of nodes whose numbe