81分求调
查看原帖
81分求调
969221
Fryderyk_Chopin楼主2023/11/27 13:00

错了#1和#11,求大佬指教,谢谢!

#include<bits/stdc++.h>
using namespace std;
int n,m,a[1010][1010],x,y,sum=0;
char d;
void dfs(int x,int y){
    if(a[x][y]==0 || a[x][y]==2) return;
    else {
        a[x][y]=2;
        dfs(x+1,y);
        dfs(x-1,y);
        dfs(x,y+1);
        dfs(x,y-1);
    }
}
void check(int c,int b,int x,int y){
    for(int i=c;i<=x;i++){
        for(int j=b;j<=y;j++){
            if(a[i][j]==0){
                cout<<"Bad placement.\n";
                exit(0);
            }
        }
    }
    sum++;
}
int main(){
    memset(a,0,sizeof(a));
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>d;
            if(d=='#') a[i][j]=1;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]==1){
                sum++;
                dfs(i,j);
                x=i;
                y=j;
                while(a[x+1][j]!=0) x++;
                while(a[i][y+1]!=0) y++;
                while(a[x][y+1]!=0) x++;
                check(i,j,x,y);
                x=i;
                y=j;
            }
        }
    }
    cout<<"There are "<<sum/2<<" ships.\n";
    return 0;
}
2023/11/27 13:00
加载中...