Counting Sheep
题目链接: 点击打开链接题目大意:T组数据,每组数据第一行两个数H、W,H行W列包含 “.”草地 或 “#”羊 ,问有多少羊群(一只羊的上下左右四个方向如果有羊则算是一个羊群)。
解题思路:简单dfs遍历搜索,从第一个字符开始,如果判断是羊,羊群数tot++,并且对这只羊进行dfs(把其上下左右的羊都标记为草,因为这只算一个羊群),再进行下一个字符判断。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 105
char map[N][N];
int go[4][2]={0,1,0,-1,1,0,-1,0};///四个方向判断
int m,n;
void dfs(int s,int t){
if(map[s][t]=='.') return ;///碰到不是羊,则结束此次搜索
map[s][t]='.';///开始对这只羊搜索,将这只羊标记为草
for(int i=0;i<4;i++){
int x=s+go[i][0],y=t+go[i][1];
if(x>=0&&x<m&&y>=0&&y<n&&map[x][y]=='#'){ ///如果旁边的依旧是羊,继续搜索
dfs(x,y);
}
}
}
int main(){
int ca;
scanf("%d",&ca);
while(ca--){
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++)
scanf("%s",map[i]);
int tot=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(map[i][j]=='#'){
tot++;///找到一个羊群
dfs(i,j);
}
}
}
printf("%d\n",tot);
}
return 0;
}