WA on #2 #3 #4 #8 #10 #11 #12
答案都小了
#include <bits/stdc++.h>
using namespace std;
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};
const int N = 125;
int n, b, ans;
int a[N][N];
bool vis[N][N];
void DFS (int x, int y, int op, int jlq) {
// cout << "***" << x << " " << y << " " << op << " " << jlq << endl;
ans = ((jlq > ans) ? jlq : ans);
if (a[x + dx[op]][y + dy[op]] && !vis[x + dx[op]][y + dy[op]]) {
vis[x][y] = true;
DFS(x + dx[op], y + dy[op], op, jlq + 1);
vis[x][y] = false;
}
if (!a[x + dx[op]][y + dy[op]] && !vis[x + dx[op]][y + dy[op]]) {
for (int i = 0; i < 4; ++i) {
if (((i + op) & 1) && a[x + dx[i]][y + dy[i]] && !vis[x + dx[i]][y + dy[i]]) {
vis[x][y] = true;
DFS(x + dx[i], y + dy[i], i, jlq + 1);
vis[x][y] = false;
}
}
}
}
int main() {
cin >> n >> b;
for (int i = 1; i <= b; ++i) {
string s;
cin >> s;
a[s[1] - '0'][s[0] - 'A' + 1] = 1;
}
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
a[i][j] ^= 1;
DFS(1, 1, 0, 1);
DFS(1, 1, 1, 1);
cout << ans << endl;
return 0;
}