社区讨论
求助,玄关 (P1189)
灌水区参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m3ohj2x8
- 此快照首次捕获于
- 2024/11/19 21:23 去年
- 此快照最后确认于
- 2025/11/04 14:23 4 个月前
CPP
//#include<all_include.h>
#include<unordered_map>
#include<algorithm>
#include<iostream>
#include<limits.h>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cmath>
#include<queue>
#include<stack>
#include<array>
#include<list>
#include<map>
#include<set>
#define umap unordered_map
#define PII pair<int,int>
#define int long long
#define MAXN 1145141
#define MAXX (1<<30)
#define endl '\n'
using namespace std;
queue<PII> que;//队列
queue<int> num;//当前是第几次转向
int sx,sy,cnt=0;
int n,m,p;
string op;
char c[114][114];
bool vis[1010][55][55];//当前方向这个格有没有走过
template<typename T>
inline void read(T &x){
int sign=1;x=0;char c=getchar();
while(!isdigit(c)){if(c=='-')sign=-1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
x*=sign;
}//getchar_unlocked()
template<typename T1,typename ...T2>
inline void read(T1 &tmp,T2 &...tmps){read(tmp);read(tmps...);}
void bfs(string op,int t){
int dx,dy;cnt++;
if(op=="NORTH") dx=-1,dy=0;
if(op=="SOUTH") dx=1,dy=0;
if(op=="EAST") dx=0,dy=1;
if(op=="WEST") dx=0,dy=-1;
while(!que.empty() && num.front()==t){
int x=que.front().first;
int y=que.front().second;
c[x][y]='.';
que.pop();num.pop();
while(c[x+dx][y+dy]!='X' && x+dx>=1 && x+dx<=n && y+dy>=1 && y+dy<=m && !vis[cnt][x+dx][y+dy]){
x+=dx,y+=dy;
c[x][y]='*';
num.push(cnt);
que.push(make_pair(x,y));
vis[cnt][x][y]=true;
// for(int i=1;i<=n;i++){//调试
// for(int j=1;j<=m;j++){
// cout<<c[i][j];
// }
// cout<<endl;
// }
// cout<<endl;
}
}
}
signed main(){
read(n,m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>c[i][j];
if(c[i][j]=='*'){
sx=i,sy=j;
num.push(cnt);
que.push(make_pair(sx,sy));
}
}
}
read(p);
while(p--){
cin>>op;
int k=num.front();
bfs(op,k);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<c[i][j];
}
cout<<endl;
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...