5 条题解

  • 1
    @ 2025-3-17 13:25:16
    #include<iostream>
    //#include<iomanip>
    //#include<math.h>
    using namespace std;
    
    // var
    int w,h,ax,ay,cnt = 1;
    int dx[] = {0,-1,0,1};
    int dy[] = {-1,0,1,0};
    char a[55][55];
    
    // func
    bool check(int x,int y){
        return ( x <= h && x >= 1 && y <= w && y >= 1 && a[x][y] == '.' );
    }
    
    void dfs(int x,int y){
        // locked
        a[x][y] = '#';
    
        // diffusion
        for(int i=0;i<=3;i++){
            if(check(x + dx[i],y + dy[i])){
                cnt ++;
                dfs(x + dx[i],y + dy[i]);
            }
        }
    }
    
    int main(){
        // in 
        while(cin >> w >> h){
            // break_cond
            if(w == 0 && h == 0){
                break;
            }
    
            // input_array
            for(int i=1;i<=h;i++){
                for(int j=1;j<=w;j++){
                    cin >> a[i][j];
    
                    if(a[i][j] == '@') ax = i , ay = j; // ???
                }
            }
    
            // call_func
            dfs(ax,ay);
    
            // out
            cout << cnt << endl;
            cnt = 1;
        }
        return 0;
    }
    

    信息

    ID
    3004
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    446
    已通过
    104
    上传者