求条,玄关,P1189 WA70pts AC30pts
查看原帖
求条,玄关,P1189 WA70pts AC30pts
889828
Wangbingxiang楼主2025/7/20 12:14
#include<bits/stdc++.h>
using namespace std;
int r,c,n;
int vis[51][51][1001];
int d[1001];
int fx[5]={0,-1,0,1,0};
int fy[5]={0,0,-1,0,1};
char ch[51][51],ans[51][51];
string s;
queue <int> qx,qy,qk;
void bfs(){
	while(!qx.empty()){
		int x=qx.front(),y=qy.front(),k=qk.front();
		qx.pop();qy.pop();qk.pop();
		for(int i=1;i<=50;i++){
			int nx=x+i*fx[d[k]],ny=y+i*fy[d[k]];
			if(nx>=1 && nx<=r && ny>=1 && ny<=c){
				if(ch[nx][ny]=='.'){
					if(k==n){
						ans[nx][ny]='*';
					}else if(vis[nx][ny][k+1]==0){
						qx.push(nx);
						qy.push(ny);
						qk.push(k+1);
						vis[nx][ny][k+1]=1;
					}
				}else break;
			}else break;
		}
	}
	
}
int main(){
	cin>>r>>c;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			cin>>ch[i][j];
			ans[i][j]=ch[i][j];
			if(ch[i][j]=='*'){
				qx.push(i);qy.push(j);qk.push(1);
				vis[i][j][1]=1;
				ans[i][j]='.';
			}
		}
	}
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s;
		if(s=="NORTH") d[i]=1;
		else if(s=="WEST") d[i]=2;
		else if(s=="SOUTH") d[i]=3;
		else if(s=="EAST") d[i]=4;
	}
	bfs();
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			cout<<ans[i][j];
		}
		cout<<endl;
	}
	return 0;
}

2025/7/20 12:14
加载中...