社区讨论

求助,玄关 (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 条回复,欢迎继续交流。

正在加载回复...