为什么会爆空间
  • 板块P1189 SEARCH
  • 楼主apple666
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/18 00:01
  • 上次更新2024/3/18 16:05:28
查看原帖
为什么会爆空间
1024377
apple666楼主2024/3/18 00:01
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
	int xx;
	int yy;
	int t;
};
int movex[4]={-1,1,0,0};
int movey[4]={0,0,1,-1};
int member[55][55][1005],road[1005];
char maps[55][55];
int main(){
	int xl,yl;
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>maps[i][j];
			if(maps[i][j]=='*')xl=i,yl=j;
		}
	}
	maps[xl][yl]='.';
	string s;
	int R;
	cin>>R;
	for(int i=0;i<R;i++){
		cin>>s;
		if(s[0]=='N')road[i]=0;
		if(s[0]=='S')road[i]=1;
		if(s[0]=='E')road[i]=2;
		if(s[0]=='W')road[i]=3;
	}
	queue<node>q;
	q.push(node{xl,yl,0});
	while(!q.empty()){
		node now=q.front();
		q.pop();
		int i=1;
		if(now.t==R)maps[now.xx][now.yy]='*';
		else while(true){
			int t=now.t;
			if(now.xx+movex[road[t]]*i>=0&&now.xx+movex[road[t]]*i<n&&  now.yy+movey[road[t]]*i>=0&&
			now.yy+movey[road[t]]*i<m&&maps[now.xx+movex[road[t]]*i][now.yy+movey[road[t]]*i]!='X'){
				if(member[now.xx+movex[road[t]]*i][now.yy+movey[road[t]]*i][t+1]==0)
				member[now.xx+movex[road[t]]*i][now.yy+movey[road[t]]*i][t+1]=1;
				q.push(node{now.xx+movex[road[t]]*i,now.yy+movey[road[t]]*i,now.t+1});
			}
			else break;
			i++;
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cout<<maps[i][j];
		}
		cout<<endl;
	}
	return 0;
}
2024/3/18 00:01
加载中...