91pts求调
  • 板块P1331 海战
  • 楼主Aelt
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/29 22:00
  • 上次更新2024/3/1 12:07:51
查看原帖
91pts求调
1198825
Aelt楼主2024/2/29 22:00

waNo.3,主要思路用的是dfs

#include<bits/stdc++.h>
using namespace std;
int r,c,ans=0;
char b;
int a[1005][1005];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
void dfs(int x,int y){
    a[x][y]=0;
    for(int i=0;i<4;i++){
        int nx=x+dx[i];
        int ny=y+dy[i];
        if(nx<1||nx>r||ny<1||ny>c||a[nx][ny]==0)continue;
        dfs(nx,ny);
    }
}
bool check(int x,int y){
    int temp=0;
    if(a[x][y]==1)temp++;
	if(a[x+1][y]==1)temp++;
	if(a[x][y+1]==1)temp++;
	if(a[x+1][y+1]==1)temp++;
    if(temp==3)return false;
    else return true;
}
int main(){
    cin>>r>>c;
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            cin>>b;
            if(b=='#')a[i][j]=1;
            else a[i][j]=0;
        }
    }
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            if(check(i,j)==0){
                cout<<"Bad placement.";
				return 0;
            }
        }
    }
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            if(a[i][j]==1){
                a[i][j]=0;
                ans++;
                dfs(i,j);
            }
        }
    }
    if(ans==0)printf("Bad placement.");
    else printf("There are %d ships.",ans);
    return 0;
}
2024/2/29 22:00
加载中...