样例过了,是哪里理解错了呀
查看原帖
样例过了,是哪里理解错了呀
321124
理想国の糕楼主2021/1/30 10:19
#include<bits/stdc++.h>
using namespace std;
int n,m;
int ans=0;
char mapp[505][505];
int vis[505][505];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
void dfs(int x,int y){
	if(mapp[x][y]=='*')return;
	if(x<1||x>n||y<1||y>m){//如果越界 
		ans=0;
		return;
	}
	//递归
	vis[x][y]=1;
	ans++;
	int nx,ny;
	for(int i=0;i<4;i++){
		nx=x+dx[i];
		ny=y+dy[i];
		if(!vis[nx][ny]){
			dfs(nx,ny);
		}
	} 
	return ;
}
int main(){
	while(cin>>n>>m){
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>mapp[i][j];
			}
		}
		int re=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(mapp[i][j]=='0'&&vis[i][j]==0){
					ans=0;
					dfs(i,j);
					re+=ans; 
				}
			}
		}
		printf("%d\n",re);
	}
	return 0;
} 

2021/1/30 10:19
加载中...