求助WA
查看原帖
求助WA
176843
Scarab楼主2021/10/30 23:33

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;
}
2021/10/30 23:33
加载中...