我真没过,AC的是题解,我看我的思路和有一篇题解差不多,就交了一下那个题解,A了,但我和题解对比,好像没啥区别啊?救救我呗QAQ
#include<bits/stdc++.h>
using namespace std;
char s[510][510];
int n , m , ans = 0;;
int dx[4] = {0 , 0 , 1 , -1};
int dy[4] = {1 , -1 , 0 , 0};
int mp[510][510];
bool vis[510][510];
bool in(int x , int y)
{
return x >= 1 && x <= n && y >= 1 && y <= m;
}
void dfs(int x , int y)
{
for(int i = 0 ; i < 4 ; i ++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if(!vis[nx][ny] && in(nx , ny) && mp[nx][ny] == 0)
{
vis[nx][ny] = true;
mp[nx][ny] = 2;
dfs(nx , ny);
}
}
}
int main()
{
scanf("%d%d" , &n , &m);
for(int i = 1 ; i <= n ; i ++)
{
for(int j = 1 ; j <= m ; j ++)
{
cin >> s[i][j];
if(s[i][j] == '0')
mp[i][j] = 0;
else
mp[i][j] = 1;
}
}
dfs(1 , 1);
for(int i = 1 ; i <= n ; i ++)
{
for(int j = 1 ; j <= m ; j ++)
{
if(mp[i][j] == 0)
ans ++;
}
}
printf("%d" , ans);
return 0;
}