标签:des style blog http io ar os sp for
The input file contains one or more grids. Each grid begins with a line containing m and n, the number of rows and columns in the grid, separated by a single space. If m = 0 it signals the end of the input;
otherwise
and
. Following
this are m lines of n characters each (not counting the end-of-line characters). Each character corresponds to one plot, and is either `*‘, representing the absence of oil, or `@‘, representing an oil pocket.
Sample Input
Sample Output
2
题目大意:给你一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。
思路:DFS上下左右斜方向寻找八连块。vis数组记录的是联通块的编号。若
暂未搜到则为0。用dx,dy二重循环表示八个方向。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char map[110][110];
int vis[110][110],M,N;
void dfs(int i,int j,int count)
{
if(i < 0 || i > M-1 || j < 0 || j > N-1)
return;
if(vis[i][j] ||map[i][j]!='@')
return;
vis[i][j] = count;
for(int dx = -1; dx <= 1; dx++)
{
for(int dy = -1; dy <= 1; dy++)
{
if(dx!=0 || dy!=0)
dfs(i+dx,j+dy,count);
}
}
}
int main()
{
while(~scanf("%d%d",&M,&N) &&(M||N))
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
for(int i = 0; i < M; i++)
scanf("%s",map[i]);
int count = 0;
for(int i = 0; i < M; i++)
{
for(int j = 0; j < N; j++)
{
if(vis[i][j]==0 && map[i][j]=='@')
dfs(i,j,++count);
}
}
printf("%d\n",count);
}
return 0;
}
标签:des style blog http io ar os sp for
原文地址:http://blog.csdn.net/lianai911/article/details/41869929