mayoko’s diary

プロコンとかいろいろ。

yukicoder No.331 CodeRunnerでやれ

解法

深さ優先探索をする要領で探索すれば良いです。

bool visit[50][50];
const int B = 25;
int dir = 0;

void dfs(int y, int x) {
    visit[y+B][x+B] = true;
    int odir = dir;
    string s;
    cin >> s;
    for (int k = 0; k < 4; k++) {
        cout << "L" << endl;
        cout.flush();
        dir = (dir+1)%4;
        int f;
        cin >> f;
        if (f != 0) {
            if (f == 20151224) {
                s = "1";
                while (isdigit(s[0])) {
                    cout << "F" << endl;
                    cout.flush();
                    cin >> s;
                }
                exit(0);
            }
            int ny = y+dy[dir];
            int nx = x+dx[dir];
            if (visit[ny+B][nx+B]) continue;
            cout << "F" << endl;
            cout.flush();
            dfs(ny, nx);
        }
    }
    while (dir != odir%4) {
        cout << "L" << endl;
        cout.flush();
        dir = (dir+1)%4;
        cin >> s;
    }
    cout << "B" << endl;
    cout.flush();
    cin >> s;
}

int main() {
    dfs(0, 0);
    return 0;
}