如题,在使用dfs写的时候,答案结果在本地上运行是正常的,然而提交后不尽人意。
以下为代码。
#include <bits/stdc++.h>
using namespace std;
typedef long long l;
l n, m, ans;
char t;
bool ways[505][505];
l dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, 1, -1};
void dfs(l x, l y) {
ways[x][y] = 1;
l tx, ty;
for (int i = 0; i < 4; i ++) {
tx = x + dx[i];
ty = y + dy[i];
if (tx > 0 && tx <= n && ty > 0 && ty <= m) {
if (ways[tx][ty] == 0) {
dfs(tx, ty);
}
}
}
}
int main () {
cin >> n >> m;
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= m; j ++) {
cin >> t;
if (t == '0') ways[i][j] = 0;
else ways[i][j] = 1;
}
}
for (int i = 1; i <= n; i ++) {
if (ways[i][1] == 0) dfs(i, 1);
if (ways[i][m] == 0) dfs(i, m);
}
for (int i = 1; i <= m; i ++) {
if (ways[1][i] == 0) dfs(1, i);
if (ways[n][i] == 0) dfs(n, i);
}
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= n; j ++) {
if (ways[i][j] == 0) ans ++;
}
}
cout << ans << endl;
return 0;
}