0分求助
  • 板块P1189 SEARCH
  • 楼主JimmyDong
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/5/26 22:20
  • 上次更新2023/10/23 14:40:58
查看原帖
0分求助
464764
JimmyDong楼主2023/5/26 22:20
#include <bits/stdc++.h> 
using namespace std;
struct dot
{
	long long px,py,step;
}t,now;
string s;
queue <dot> q;
long long r,c,m,a[1005];
char ch[55][55],chans[55][55];
int main()
{
	scanf("%lld%lld",&r,&c);
	for(int i=1;i<=r;i++)
		for(int j=1;j<=c;j++)
		{
			cin>>ch[i][j];
			chans[i][j]=ch[i][j];
		}
	scanf("%lld",&m);
	for(int i=1;i<=m;i++)
	{
		cin>>s;
		if(s=="NORTH") a[i]=1;
		else if(s=="SOUTH") a[i]=2;
		else if(s=="WEST") a[i]=3;
		else a[i]=4;
	}
	for(int i=1;i<=r;i++)
		for(int j=1;j<=c;j++) 
		{
			if(ch[i][j]=='*')
			{
				t.px=i;
				t.py=j;
				q.push(t);
			}
		}
	while(!q.empty())
	{
		t=q.front();
		q.pop();
		if(t.step==m) chans[t.px][t.py]='*';
		long long k=t.step+1;
		if(a[k]==1)
		{
			for(int i=1;;i++)
			{
				if(t.px-i<1) break;
				if(ch[t.px-i][t.py]!='X')
				{
					now.px=t.px-i;
					now.py=t.py;
					now.step=k;
					q.push(now);
				}
			 } 
		}
		else if(a[k]==2)
		{
			for(int i=1;;i++)
			{
				if(t.px+i>r) break;
				if(ch[t.px+i][t.py]!='X')
				{
					now.px=t.px+i;
					now.py=t.py;
					now.step=k;
					q.push(now);
				}
			 } 
		}
		else if(a[k]==3)
		{
			for(int i=1;;i++)
			{
				if(t.py-i<1) break;
				if(ch[t.px][t.py-i]!='X')
				{
					now.px=t.px;
					now.py=t.py-i;
					now.step=k;
					q.push(now);
				}
			 } 
		}
		else
		{
			for(int i=1;;i++)
			{
				if(t.py+i>c) break;
				if(ch[t.px][t.py+i]!='X')
				{
					now.px=t.px;
					now.py=t.py+i;
					now.step=k;
					q.push(now);
				}
			 } 
		}
	}
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=c;j++) cout<<chans[i][j];
		cout<<endl;
	}
	return 0;
}
2023/5/26 22:20
加载中...