社区讨论

求调

P1331海战参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mdfb4tcj
此快照首次捕获于
2025/07/23 09:51
7 个月前
此快照最后确认于
2025/11/04 03:54
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
ll n,m,u[4]={0,-1,1,0},v[4]={-1,0,0,1},vis[5050][5050];
char a[5010][5010];
int dfs(int x,int y)
{
	for(int i=0;i<4;i++)
	{
		ll p=x+u[i],q=y+v[i];
		if(p>0&&p<=n&&q>0&&q<=m&&a[p][q]=='#'&&vis[p][q]==0)
		{
			vis[p][q]=1;
			dfs(p,q);
		}
	}
} 
bool cheak(int x,int y)
{
	ll s=0;
	if(a[x][y]=='#')
	{
		s++;
	}
	if(a[x+1][y]=='#')
	{
		s++;
	}
	if(a[x][y+1]=='#')
	{
		s++;
	}
	if(a[x+1][y+1]=='#')
	{
		s++;
	}
	return s!=3;
} 
int main()
{
	cin>>n>>m; 
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	int s=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(i<n&&j<m&&!cheak(i,j))
			{
				cout<<"Bad placement.";
				return 0; 
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]=='#'&&vis[i][j]==0)
			{
				s++;
				vis[i][j]=1;
				dfs(i,j);	
			}
		}
	}
	cout<<"There are "<<s<<" ships.";
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...