POJ1979 dfs xingxing在努力

      求连通域内元素个数, 水题一个直接贴代码:

       

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
int n, m;             //n行m列
int Map[30][30];
int vis[30][30];
int sx, sy;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};

int dfs(int x, int y)
{
    int res = 1;
    vis[x][y] = 1;
    for(int i=0; i<4; i++)
    {
        int nx = x + dx[i], ny = y + dy[i];
        if(nx>=0&&nx<n&&ny>=0&&ny<m&&!vis[nx][ny]&&Map[nx][ny]==0)
            res += dfs(nx, ny);
    }
    return res;
}

int main()
{
    while(scanf("%d%d", &m, &n) == 2)
    {
        if(n==0 && m==0) break;
        for(int i=0; i<n; i++)
        {
            char s[30];                                //开小了 贡献2发wa 醉了
            scanf("%s", s);
            for(int j=0; j<m; j++)
                if(s[j]=='.') Map[i][j] = 0;
                else if(s[j]=='#') Map[i][j] = 1;
                else
                {
                    Map[i][j] = 2;
                    sx = i; sy = j;
                }
        }
        memset(vis, 0, sizeof(vis));
        printf("%d\n", dfs(sx, sy));
    }
    return 0;
}

 

posted @ 2015-11-22 14:09  xing-xing  阅读(89)  评论(0)    收藏  举报