标签: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