top1编程
← 返回题目
题解

【入门】红与黑

1 条题解

  • 0
    @ 2026-7-28 22:44:50
    #include <bits/stdc++.h> 
    using namespace std;
    char a[105][105];
    int n,m,c,fx[10]={0,0,1,0,-1},fy[10]={0,1,0,-1,0};
    
    void f(int x,int y){
        // 边界合法 且 是未走过的黑瓷砖 .
        if(y<=m&&x<=n&&y>=1&&x>=1&&a[x][y]=='.'){
            c++;
    		a[x][y]='#';
            f(x,y+1);
            f(x+1,y);
            f(x,y-1);
            f(x-1,y);
        }
    }
    
    int main(){
        c = 0;
    	cin>>m>>n;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>a[i][j];
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(a[i][j]=='@'){
                    c++;
                    a[i][j]='#';
                    // 不调用 f(i,j),改为 四个方向逐个递归
                    f(i,j+1);
                    f(i+1,j);
                    f(i,j-1);
                    f(i-1,j);
                }
            }
        }
        cout<<c;
        return 0;
    }
    
    • 1