ZOJ 2412

将用字母表示的图转化成一个能读的图即可,即将每个字符所表示的图形表示成3*3的图,这样就得到了一个3*n*3*m的图,照着深搜即可

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <iostream>
using namespace std;
char arr[200][200];
char sen[60];
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}, n, m;
void dfs(int x, int y){
    int i, j, k, dx, dy;
    arr[x][y] = '.';
    for(i = 0; i < 4; i++){
        dx = x + dir[i][0];
        dy = y + dir[i][1];
        if(1 <= dx && dx <= n && 1 <= dy && dy <= m && arr[dx][dy] == '@'){
            dfs(dx, dy);
        }
    }
}

int main(){
    int nn, mm, i, j, k, kx, ky, res;
    while(scanf("%d %d", &nn, &mm) != EOF){
        if(nn == -1 && mm == -1){
            break;
        }
        n = nn * 3, m = mm * 3;
        kx = ky = 1;
        memset(arr, 0, sizeof(arr));
        memset(sen, 0, sizeof(sen));
        for(i = 1; i <= nn; i++){
            scanf("%s", sen);
            for(j = 0; j < mm; j++){
                if(sen[j] == 'A'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '@';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '.';
                    arr[kx + 2][ky++] = '.';
                }
                else if(sen[j] == 'B'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '.';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '@';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                }
                else if(sen[j] == 'C'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '@';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '.';
                    arr[kx + 2][ky++] = '.';
                }
                else if(sen[j] == 'D'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '.';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '@';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                }
                else if(sen[j] == 'E'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '.';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '@';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '@';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '.';
                    arr[kx + 2][ky++] = '.';
                }
                else if(sen[j] == 'F'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                }
                else if(sen[j] == 'G'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '@';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                }
                else if(sen[j] == 'H'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '@';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '@';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '.';
                    arr[kx + 2][ky++] = '.';
                }
                else if(sen[j] == 'I'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '@';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                }
                else if(sen[j] == 'J'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '.';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '@';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '@';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                }
                else if(sen[j] == 'K'){
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                    arr[kx][ky] = '@';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '@';
                    arr[kx][ky] = '.';
                    arr[kx + 1][ky] = '@';
                    arr[kx + 2][ky++] = '.';
                }
            }
            memset(sen, 0, sizeof(sen));
            ky = 1, kx += 3;
        }
//        for(i = 1; i <= n; i++){
//            for(j = 1; j <= m; j++){
//                printf("%c", arr[i][j]);
//            }
//            printf("\n");
//        }
        res = 0;
        for(i = 1; i <= n; i++){
            for(j = 1; j <= m; j++){
                if(arr[i][j] == '@'){
                    dfs(i, j);
                    res++;
                }
            }
        }
        printf("%d\n", res);
    }
return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值