poj2386----简单dfs,a一送一


/*poj2386 求有几个水坑*/
#include<stdio.h>
#include<iostream>
char ans[110][110];
int n, m;
int cnt;
int dx[10] = {-1, 0, 1, -1, 1, -1, 0, 1};
int dy[10] = {1, 1, 1, 0, 0, -1, -1, -1};
void dfs(int x, int y)
{
    ans[x][y] = '.';
    for(int i=0; i<8; i++)
    {
        int tx = x + dx[i];
        int ty = y + dy[i];
        if(tx>=0 && tx<n && ty>=0 && ty<m && ans[tx][ty]=='W')
        {
            dfs(tx, ty);         
        }        
    }
}
void fun()
{
    cnt = 0;
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            if(ans[i][j] == 'W')
            {
                cnt++;
                dfs(i, j);           
            }       
        }        
    }
    printf("%d\n", cnt);     
}
int main()
{
    while(scanf("%d %d", &n, &m) != EOF)
    {
        getchar();
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                scanf("%c", &ans[i][j]);        
            }  
            getchar();      
        }      
        fun();
    }
    return 0;    
}



a一送一:poj3620

/*poj3620 求最大的水坑*/ 
#include<iostream>
#include<stdio.h>

int n, m, k;
int ans[110][110];
int dx[5] = {0, 1, 0, -1};
int dy[5] = {1, 0, -1, 0};
int tmp;

void dfs(int x, int y)
{
    ans[x][y] = 0; tmp++;
    for(int i=0; i<4; i++)
    {
        int tx = x + dx[i];
        int ty = y + dy[i];
        if(tx>=0 && tx<n && ty>=0 && ty<m && ans[tx][ty]) 
        {
            dfs(tx, ty) ; 
        }       
    }   
}
void fun()
{
    int cnt = 0;
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            tmp=0;
            if(ans[i][j])
            {
                dfs(i, j);  
                if(tmp > cnt)
                    cnt = tmp;   
            }        
        }        
    }  
    printf("%d\n", cnt);  
}
int main()
{
    int a, b;
    while(scanf("%d %d %d", &n, &m, &k) != EOF)
    {
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                ans[i][j] = 0;        
            }        
        }        
        for(int i=0; i<k; i++)
        {
            scanf("%d %d", &a, &b);
            ans[a-1][b-1] = 1;        
        }
        fun();
    }
    return 0;    
}



a一送一:poj3620
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值