54WA,求助大佬
  • 板块P1331 海战
  • 楼主Exscallop64_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/15 21:14
  • 上次更新2024/1/16 11:02:57
查看原帖
54WA,求助大佬
732034
Exscallop64_楼主2024/1/15 21:14

上代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int n,m,ans;
char mp[N][N];
int dx[]={0,-1,1,0};
int dy[]={-1,0,0,1};
void DFS(int x,int y){//dfs搜索
	mp[x][y]='*';//标记
	for(int i=0;i<4;i++){
		if(x+dx[i]>0&&y+dy[i]>0&&x+dx[i]<=n&&y+dy[i]<=m&&mp[x+dx[i]][y+dy[i]]=='#'){//搜索条件
			DFS(x+dx[i],y+dy[i]);//递归搜索
		}
	}
}
bool P(int x,int y){
	int res=0;
	if(mp[x+1][y]=='#') res++;
	if(mp[x-1][y]=='#') res++;
	if(mp[x][y+1]=='#') res++;
	if(mp[x][y-1]=='#') res++;
  //在2*2的矩阵中有三个就不行
	if(res==3){
		return false;
	}
	return true;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>mp[i][j];//输入
		}
	}
	for(int i=1;i<n;i++){
		for(int j=1;j<m;j++){//遍历(i+1及j+1会超过n,m,所以小于n,m
			if(P(i,j)==false){
				cout<<"Bad placement.";
				return 0;
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(mp[i][j]=='#'){
				ans++;//累加
				DFS(i,j);//搜索标记
			}
		}
	}
	cout<<"There are "<<ans<<" ships.";
	return 0;
} 
2024/1/15 21:14
加载中...