您的位置:首页 > 其它

swustOJ 1378 Best Grass

2016-04-05 16:30 141 查看
给你一个矩形空地的长度和宽度,输入#或者. #代表草地,求出单独的没有连接的草地个数,长度宽度小于100;

示例:

5 6

.#....

..#...

..#..#

...##.

.#....

5

分析:很明显,要把全图的所有地方都搜索完,如果搜索到#,这记录的T++;然后以这个点为根节点,进行上下左右的四个方向的DFS,搜索有没有连通的草地块,如果有则继续DFS,注意,在搜索过程中,需要一个标记地图,因为如果搜索到#,与#连通,则第二个#就不能再座位单独的草地块,就需要标记,每搜索到一个#就标记下来,注意边界问题。

#include<stdio.h>
#include<string.h>
char map[105][105];
int use[105][105],r,c;  //标记
int v[4][2]={-1,0,1,0,0,1,0,-1};  //四个方向
void DFS(int i,int j)
{
int k;
for(k=0;k<4;k++)
{
int x=i+v[k][0];
int y=j+v[k][1];
if(!use[x][y]&&map[x][y]=='#'&&x>=0&&x<r&&y>=0&&y<c)
{
use[x][y]=1;
DFS(x,y);
}
}
}
int main()
{
int i,j,t=0,i2;
scanf("%d%d",&r,&c);
for(i2=0;i2<r;i2++)
{
scanf("%s",map[i2]);
}
memset(use,0,sizeof(use));
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
if(map[i][j]=='#'&&!use[i][j])
{
use[i][j]=0;
DFS(i,j);
t++;
}

}
}
printf("%d\n",t);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: