两个样例都过了,但交上去零分,求调
查看原帖
两个样例都过了,但交上去零分,求调
384419
Apress楼主2022/7/24 13:53

RT

#include<bits/stdc++.h>
using namespace std;
int x,y,ans;
char a[510][510];
int s1[4]={0,0,1,-1},s2[4]={1,-1,0,0};
bool flag[510][510];
void dfs1(int m,int n){
	flag[m][n]=1;
	for(int i=0;i<4;i++)
	  if(m+s1[i]>=1&&n+s2[i]>=1&&m+s1[i]<=x&&n+s2[i]<=y&&a[m+s1[i]][n+s2[i]]=='0'&&flag[m+s1[i]][n+s2[i]]==0)  dfs1(m+s1[i],n+s2[i]);
	return ;
} 
void dfs2(int m,int n){
	flag[m][n]=1;
	for(int i=0;i<4;i++)
	  if(m+s1[i]>=1&&n+s2[i]>=1&&m+s1[i]<=x&&n+s2[i]<=y&&a[m+s1[i]][n+s2[i]]=='0'&&flag[m+s1[i]][n+s2[i]]==0)  dfs2(m+s1[i],n+s2[i]);
	return ;
} 
int main()
{
    cin>>x>>y;
    for(int i=1;i<=x;i++)
      for(int j=1;j<=y;j++)  cin>>a[i][j];
    for(int i=1;i<=x;i++)
      if(a[i][1]=='0'&&flag[i][1]==0)  dfs1(i,1); 
    for(int i=1;i<=x;i++)
      if(a[i][y]=='0'&&flag[i][y]==0)  dfs1(i,y);
	for(int j=1;j<=y;j++)
      if(a[1][j]=='0'&&flag[1][j]==0)  dfs1(1,j);
    for(int j=1;j<=y;j++)
      if(a[x][j]=='0'&&flag[x][j]==0)  dfs1(x,j);
    

    for(int i=1;i<=x;i++)
      for(int j=1;j<=y;j++){
      	if(flag[i][j]==0&&a[i][j]=='0'){
      		dfs2(i,j);
      		ans++;
		  }  
	  }
    cout<<ans; 
	return 0;
}

2022/7/24 13:53
加载中...