呜呜呜,华丽的暴力搜索怎么比不过题解的四层循环呢,求大佬解释一下
int n, m;
int ti, tj;
long long res;
long long dfs(vector<vector<long long>> f, vector<vector<bool>> flag, int i, int j, int depth) {
if (i > n - 1 || i < 0 || j < 0 || j > m - 1 || flag[i][j]) return res;
flag[i][j] = true;
if (depth == 0) {
ti = i;
tj = j;
} else {
if (f[i][j] == f[ti][tj])
res = max(res, (long long) (pow((i - ti), 2) + pow((j - tj), 2)));
}
dfs(f, flag, i + 1, j, depth + 1);
dfs(f, flag, i, j + 1, depth + 1);
dfs(f, flag, i - 1, j, depth + 1);
dfs(f, flag, i, j - 1, depth + 1);
return res;
}
int main() {
cin >> n >> m;
vector<vector<long long> > f(n, vector<long long>(m));
for (int i = 0; i < n; i++) {
for (int j = 0, x; j < m; j++) {
cin >> f[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
vector<vector<bool>> flag(n, vector<bool>(m));
res = LLONG_MIN;
cout << dfs(f, flag, i, j, 0) << " ";
}
cout << endl;
}
return 0;
}