91分求助
  • 板块P1331 海战
  • 楼主Ace_Maochang
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/9/26 18:31
  • 上次更新2023/11/2 18:00:34
查看原帖
91分求助
707144
Ace_Maochang楼主2023/9/26 18:31

RT

#include<iostream>
using namespace std;

int r,c,cnt=0;
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
char map[1001][1001];

void dfs(int x,int y){
	map[x][y]='*';
	for(int i=1;i<=4;i++){
		if(x + dx[i] > 0 && x + dx[i] <= r && y + dy[i] > 0 && y + dy[i] <= c   &&   map[x+dx[i]][y+dy[i]] == '#' )
			dfs(x + dx[i], y + dy[i]);
	}
}

bool d(int i,int j){
	int c=0;
	if(map[i][j] == '#') c++;
	if(map[i+1][j] == '#') c++;
	if(map[i][j+1] == '#') c++;
	if(map[i+1][j+1] == '#') c++;
	if(c == 3)return 0;
	return 1;
}

int main(){
	cin>>r>>c;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			cin>>map[i][j];
		}
	}
	
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(i<r&&j<c&&d(i,j)==0){
				cout<<"Bad placement.";
				return 0;
			}
		}
	}
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(map[i][j]=='#'){
				cnt++;
				dfs(i,j);	
			} 
		}
	}
	if(cnt==0)	cout<<"Bad placement.";
	else cout<<"There are "<<cnt<<" ships.";
}
2023/9/26 18:31
加载中...