这份代码
#include <bits/stdc++.h>
using namespace std;
const int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};
int h, w, ans, vis[1005][1005];
char s[1005][1005];
int dfs(int x, int y, int t)
{
if (x < 1 || x > h || y < 1 || y > w || vis[x][y] >= t)
return 0;
int ret = 1;
for (int i = 0; i < 4; i++)
if (s[x + dx[i]][y + dy[i]] == '#')
return vis[x][y] = t, ret;
vis[x][y] = 1e9;
for (int i = 0; i < 4; i++)
ret += dfs(x + dx[i], y + dy[i], t);
return ret;
}
int main()
{
cin >> h >> w;
for (int i = 1; i <= h; i++)
for (int j = 1; j <= w; j++)
if (cin >> s[i][j]; s[i][j] == '#')
vis[i][j] = 1e9;
for (int i = 1; i <= h; i++)
for (int j = 1; j <= w; j++)
if (!vis[i][j])
ans = max(ans, dfs(i, j, i * w + j));
cout << ans;
return 0;
}
与这份代码
#include <bits/stdc++.h>
using namespace std;
const int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};
int h, w, ans, vis[1005][1005];
string s[1005];
int dfs(int x, int y, int t)
{
if (x < 1 || x > h || y < 1 || y > w || vis[x][y] >= t)
return 0;
int ret = 1;
for (int i = 0; i < 4; i++)
if (s[x + dx[i]][y + dy[i]] == '#')
return vis[x][y] = t, ret;
vis[x][y] = 1e9;
for (int i = 0; i < 4; i++)
ret += dfs(x + dx[i], y + dy[i], t);
return ret;
}
int main()
{
cin >> h >> w;
for (int i = 1; i <= h; i++)
{
cin >> s[i], s[i] = ' ' + s[i] + ' ';
for (int j = 1; j <= w; j++)
if (s[i][j] == '#')
vis[i][j] = 1e9;
}
for (int i = 1; i <= h; i++)
for (int j = 1; j <= w; j++)
if (!vis[i][j])
ans = max(ans, dfs(i, j, i * w + j));
cout << ans;
return 0;
}
只有s数组的类型和输入部分有所不同,但是后者却会WA掉4个点(分别是random_03.txt、random_04.txt、random_05.txt、random_35.txt),请问是哪里出了问题?