社区讨论

求条10pts

P1189[COI 2001] SEARCH参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mdi5prxj
此快照首次捕获于
2025/07/25 09:42
8 个月前
此快照最后确认于
2025/11/04 03:46
4 个月前
查看原帖
CPP
#include "bits/stdc++.h"
#define mkp make_pair
using namespace std;
int r, c;
int n;
int dircs[1005];
bool mp[55][55];
bool canpark[55][55];
bool vis[55][55];
pair<int, int> st;
int dx[5] = {0, -1, 0, 1, 0};
int dy[5] = {0, 0, -1, 0, 1};
void dfs(pair<int, int> pos, int dirid)
{
    if (dirid > n)
    {
        canpark[pos.first][pos.second] = true;
        return;
    }
    vis[pos.first][pos.second] = true;
    int nowdirc = dircs[dirid];
    int go_dis = (nowdirc & 1 ? r : c);
    for (int i = 1; i <= go_dis; i++)
    {
        int tox = pos.first + i * dx[nowdirc];
        int toy = pos.second + i * dy[nowdirc];
        if (mp[tox][toy] || vis[tox][toy] || tox > r || tox < 1 || toy > c || toy < 1)
            break;
        vis[tox][toy] = true;
        dfs(mkp(tox, toy), dirid + 1);
        vis[tox][toy] = false;
    }
}
signed main()
{
    cin >> r >> c;
    for (int i = 1; i <= r; i++)
    {
        for (int j = 1; j <= c; j++)
        {
            char c;
            cin >> c;
            mp[i][j] = (c == 'X');
            if (c == '*')
                st = mkp(i, j);
        }
    }
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        string k;
        cin >> k;
        if (k == "NORTH")
            dircs[i] = 1;
        else if (k == "WEST")
            dircs[i] = 2;
        else if (k == "SOUTH")
            dircs[i] = 3;
        else
            dircs[i] = 4;
    }
    dfs(st, 1);
    for (int i = 1; i <= r; i++)
    {
        for (int j = 1; j <= c; j++)
        {
            if (canpark[i][j])
                cout << '*';
            else if (mp[i][j])
                cout << 'X';
            else
                cout << '.';
        }
        cout << endl;
    }
}

回复

0 条回复,欢迎继续交流。

正在加载回复...