就 不知道是哪出问题了
代码如下
#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来行 感谢了