zl程序教程

您现在的位置是:首页 >  其它

当前栏目

HDU 1241 Oil Deposits (DFS)

HDU DFS
2023-09-14 09:06:20 时间

题目链接:Oil Deposits


解析:问有多少个“@”块。当中每一个块内的各个“@”至少通过八个方向之中的一个相邻。

直接从“@”的地方開始向相邻八个方向搜索,每搜到一个格子。就将它替换成“.”,一次搜索就会搜索完一个块,记录搜索的次数为答案。



AC代码:

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;

char mz[110][110];
const int dir[8][2] = {0, 1, 1, 0, 0, -1, -1, 0, 1, 1, -1, -1, 1, -1, -1, 1};    //八个方向
int n, m;

void dfs(int sx, int sy){
    mz[sx][sy] = '.';    //搜到的位置替换成‘.’
    for(int i=0; i<8; i++){
        int x = sx + dir[i][0];
        int y = sy + dir[i][1];
        if(x >= 0 && x < n && y >= 0 && y < m && mz[x][y] == '@')
            dfs(x, y);
    }
    return ;
}

int main(){
//    freopen("in.txt", "r", stdin);
    while(scanf("%d%d", &n, &m) == 2 && n){
        for(int i=0; i<n; i++){
            scanf("%s", mz[i]);
        }

        int ans = 0;
        for(int i=0; i<n; i++)
            for(int j=0; j<m; j++){
                if(mz[i][j] == '@'){
                    dfs(i, j);
                    ans ++;      //记录搜索次数
                }
            }
        printf("%d\n", ans);
    }
    return 0;
}