测试点1下载下来是对的 但是WA壮观 求大佬指点
查看原帖
测试点1下载下来是对的 但是WA壮观 求大佬指点
251540
印花布楼主2020/8/18 14:21

就 不知道是哪出问题了

代码如下

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int x,y,ans;
char map[505][505];
int visit[505][505];
int kx[5]={0,1,-1,0,0};
int ky[5]={0,0,0,-1,1};
void dfs(int a,int b){
	
	visit[a][b]=1;
	map[a][b]='*';
	int x1,y1;
	for(int i=1;i<5;++i){
		x1=a+kx[i];
		y1=b+ky[i];
		if(x1>0&&x1<=x&&y1>0&&y1<=y&&map[x1][y1]=='0')
			dfs(x1,y1);
	}
	return;
}
int main(){
	scanf("%d%d",&x,&y);
	getchar();
	memset(map,0,sizeof(map));
	for(int i=1;i<=x;++i){
		for(int j=1;j<=y;++j){
			scanf("%c",&map[i][j]);
		}
		getchar();
	}
	/*for(int i=1;i<=x;++i){
		for(int j=1;j<=y;++j){
			printf("%c",map[i][j]);
		}
		printf("\n");
	}*/
	/*for(int i=1;i<=x;++i){
		map[i][0]='*';
		map[i][y+1]='*';
	}
	for(int i=1;i<=y;++i){
		map[1][i]='*';
		map[x+1][i]='*';
	}*/
	for(int i=1;i<=x;++i){
		//printf("%d%d\n",i,1);
		if(map[i][1]=='0')
			dfs(i,1);
		if(map[i][y]=='0')	
			dfs(i,y);
	}
	for(int i=1;i<=y;++i){
		if(map[1][i]=='0')
			dfs(1,i);
		if(map[x][i]=='0')
			dfs(x,i);
	}
	/*for(int i=1;i<=x;++i){
		for(int j=1;j<=y;++j){
			printf("%c",map[i][j]);
		}
		printf("\n");
	}*/
	for(int i=1;i<=x;++i){
		for(int j=1;j<=y;++j){
			if(map[i][j]=='0'){
				ans++;
			//	printf("ans:%d%d\n",i,j);
			}
		}
	}
	printf("%d\n",ans);
	return 0;
} 
/*
[1]
in

4 5
00000
00*00
0*0*0
00*00

out
1
[2]
in

5 5
*****
*0*0*
**0**
*0*0*
*****

out 
5

*/

看到这就是您浪费时间看了100来行 感谢了

2020/8/18 14:21
加载中...