方向数组
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1}; // 上 右 下 左
/
的情况如下图:
d = d ^ 1;
\
的情况:
d = d ^ 3;
#include <iostream>
using namespace std;
const int N = 1e3 + 5;
char g[N][N];
int n, m, ans;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1}; // 上 右 下 左
void dfs(int x, int y, int d, int u) {
ans = max(ans, u);
if (g[x][y] == '/') {
d = d ^ 1;
} else {
d = d ^ 3;
}
int a = x + dx[d], b = y + dy[d];
if (a >= 1 && a <= n && b >= 1 && b <= m) {
dfs(a, b, d, u + 1);
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> g[i][j];
}
}
for (int i = 1; i <= n; i++) {
dfs(i, 1, 1, 1); // 右
dfs(i, m, 3, 1); // 左
}
for (int j = 1; j <= m; j++) {
dfs(1, j, 2, 1); // 下
dfs(n, j, 0, 1); // 上
}
cout << ans << endl;
return 0;
}
#include <iostream>
using namespace std;
const int N = 1e3 + 5;
char g[N][N];
int n, m, ans;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1}; // 上 右 下 左
int dfs(int x, int y, int d) {
if (x < 1 || x > n || y < 1 || y > m) {
return 0;
}
if (g[x][y] == '/') {
d = d ^ 1;
} else {
d = d ^ 3;
}
return dfs(x + dx[d], y + dy[d], d) + 1;
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> g[i][j];
}
}
for (int i = 1; i <= n; i++) {
ans = max(ans, dfs(i, 1, 1)); // 右
ans = max(ans, dfs(i, m, 3)); // 左
}
for (int j = 1; j <= m; j++) {
ans = max(ans, dfs(1, j, 2)); // 下
ans = max(ans, dfs(n, j, 0)); // 上
}
cout << ans << endl;
return 0;
}