0分求助,悬关
查看原帖
0分求助,悬关
763540
Silence_nk_zht楼主2023/12/5 22:13

样例过了,0分

#include<bits/stdc++.h>
using namespace std;
int flag[1010][1010];
int a[100010]={0};
char s[1010][1010];

const int dx[]={0,-1,0,1,0,-1,-1,1,1,-2,0,2,0};
const int dy[]={0,0,1,0,-1,-1,1,1,-1,0,2,0,-2};

int n,m,x,y,ans=1,num=0;


void bfs(int startx,int starty){
	queue<int>qx;
	queue<int>qy;
	flag[startx][starty]=1;
	qx.push(startx);
	qy.push(starty);	
	while(!qx.empty() && !qy.empty()){
		int nowx,nowy;
		nowx=qx.front();
		nowy=qy.front();
		qx.pop();
		qy.pop();
		for(int i=1;i<=12;i++){
			int newx,newy;
			newx=dx[i]+nowx;
			newy=dy[i]+nowy;
			if(newx>n || newx<1 || newy>m || newy<1 || s[newx][newy]=='#' || flag[newx][newy]!=0)
			{
				continue;
			}
			flag[newx][newy]=1;
			qx.push(newx);
			qy.push(newy);
		}
	}
}
int main( ){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%1c",&s[i][j]);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(flag[i][j]==0 && s[i][j]!='#'){
				bfs(i,j);
				num++;
			}
		}
	}																																										
	cout<<num;
	return 0;
}
2023/12/5 22:13
加载中...