求助
查看原帖
求助
1060965
fanjiajun_U楼主2024/3/24 17:36
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
	int shu;
	int bian;
}; 
node a[550][550];
int ans;
void found(int q1,int q2){
	if(q1==1||q2==1){
		return ;
	}
	if(a[q1-1][q2].shu!=1&&a[q1-1][q2].bian==0){
		a[q1-1][q2].bian=1;
		if(a[q1-1][q2].shu==2) ans--;
		a[q1-1][q2].shu=0;
		found(q1-1,q2);
	}
	if(a[q1][q2-1].shu!=1&&a[q1][q2-1].bian==0){
		a[q1][q2-1].bian=1;
		if(a[q1][q2-1].shu==2) ans--;		
		a[q1][q2-1].shu=0;
		found(q1,q2-1);
	}
	if(a[q1-1][q2-1].shu!=1&&a[q1-1][q2-1].bian==0){
		a[q1-1][q2-1].bian=1;
		if(a[q1-1][q2-1].shu==2) ans--;		
		a[q1-1][q2-1].shu=0;
		found(q1-1,q2-1);
	}
	return ;	
}
void bfs(){
	for(int x=1;x<=n;x++){
		for(int y=1;y<=m;y++){
			if(a[x][y].shu==1){
				continue;
			}else if((x==1||y==1||x==n||y==n||a[x-1][y].bian==1||a[x][y-1].bian==1||a[x-1][y-1].bian==1)){
				a[x][y].bian=1;
				found(x,y);									
			}else{
				a[x][y].shu=2;
				ans++;
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			char lin;
			cin>>lin;
			if(lin=='*') a[i][j].shu=1;
			else a[i][j].shu=0;
		}
	}
	bfs();
	cerr<<endl;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cerr<<a[i][j].shu<<" ";
		}
		cerr<<endl;
	}
	cout<<ans;
	return 0;
}
2024/3/24 17:36
加载中...