求助,C++20分,1WA,3TLE,4MLE
  • 板块P1189 SEARCH
  • 楼主崔化博
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/4/11 10:43
  • 上次更新2023/11/5 00:42:51
查看原帖
求助,C++20分,1WA,3TLE,4MLE
304524
崔化博楼主2021/4/11 10:43

RT

#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
struct node {
	int x,y;
};
int r,c,n,x1,y1,q[1005][2];
char map[55][55];
bool pd(int x,int y) {
	if(x<1||x>r||y<1||y>c||map[x][y]=='X')
		return 0;
	return 1;
}
void bfs(node c) {
	queue<node> s[1005];
	s[1].push(c);
	//while(1){
	for(int i=1; i<=n; ++i) {
		while(!s[i].empty()) {
			//cout<<s[i].front().x<<' '<<s[i].front().y<<' '<<x<<' '<<y<<endl;
			int x=s[i].front().x+q[i][0],y=s[i].front().y+q[i][1];		
			while(pd(x,y)) {
				//cout<<i<<' ';
				s[i+1].push((node) {
					x,y
				});
				x+=q[i][0];
				y+=q[i][1];
			}
			//cout<<endl;
			s[i].pop();
		}
	} 
	while(!s[n+1].empty()) {
		node w=s[n+1].front();
		map[w.x][w.y]='*';
		s[n+1].pop();
	}
	//}
}
int main() {
	cin>>r>>c;
	for(int i=1; i<=r; ++i) {
		for(int j=1; j<=c; ++j) {
			cin>>map[i][j];
			if(map[i][j]=='*')
				x1=i,y1=j;
		}
	}
	cin>>n;
	for(int i=1; i<=n; ++i) {
		string s;
		cin>>s;
		switch(s[0]) {
			case 'N': {
				q[i][0]=-1;
				q[i][1]=0;
				break;
			}
			case 'S': {
				q[i][0]=1;
				q[i][1]=0;
				break;
			}
			case 'W': {
				q[i][0]=0;
				q[i][1]=-1;
				break;
			}
			case 'E': {
				q[i][0]=0;
				q[i][1]=1;
				break;
			}
		}
	}
	bfs((node) {
		x1,y1
	});
	for(int i=1; i<=r; ++i) {
		for(int j=1; j<=c; ++j) {
			if(i==x1&&j==y1)
				cout<<'.';
			else
				cout<<map[i][j];
		}
		cout<<endl;
	}
	return 0;
}
2021/4/11 10:43
加载中...