社区讨论
求条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 条回复,欢迎继续交流。
正在加载回复...