此为本人尝试后写出来的代码,然而看上去没错实际上WA40分,不知该怎么搞……
(优化不太好,抱歉了)
#include<bits/stdc++.h>
using namespace std;
int height,width,run; //高;宽;指令数
char mp[51][51]; //地图
string command[1002]; //好吧事实上我定义这个压根没用,光占空间(
typedef pair<int,int> pii;
set<pii> lol1,lol2; //可能的距离点
int main(){
cin>>height>>width;
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
cin>>mp[j][i];
if(mp[j][i]=='*'){
lol1.insert(make_pair(j,i)); //初始距离点
mp[j][i]='.';
}
}
}
cin>>run;
for(int i=0;i<run;i++){
cin>>command[i];
if(command[i]=="NORTH"){
if(lol1.empty()){
for(pii t:lol2){
int x=t.first;//获取距离点x
int y=t.second;//获取距离点y
for(int k=y-1;k>=0;k--){//沿着这条路开
if(mp[x][k]=='X')break;//再开就撞车了!
lol1.insert(make_pair(x,k));//记录可能的距离点
}
}
lol2.clear();
}else{
for(pii t:lol1){
int x=t.first;
int y=t.second;
for(int k=y-1;k>=0;k--){
if(mp[x][k]=='X')break;
lol2.insert(make_pair(x,k));
}
}
lol1.clear();
}
}else if(command[i]=="SOUTH"){
if(lol1.empty()){
for(pii t:lol2){
int x=t.first;
int y=t.second;
for(int k=y+1;k<height;k++){
if(mp[x][k]=='X')break;
lol1.insert(make_pair(x,k));
}
}
lol2.clear();
}else{
for(pii t:lol1){
int x=t.first;
int y=t.second;
for(int k=y+1;k<height;k++){
if(mp[x][k]=='X')break;
lol2.insert(make_pair(x,k));
}
}
lol1.clear();
}
}else if(command[i]=="WEST"){
if(lol1.empty()){
for(pii t:lol2){
int x=t.first;
int y=t.second;
for(int k=x-1;k>=0;k--){
if(mp[k][y]=='X')break;
lol1.insert(make_pair(k,y));
}
}
lol2.clear();
}else{
for(pii t:lol1){
int x=t.first;
int y=t.second;
for(int k=x-1;k>=0;k--){
if(mp[k][y]=='X')break;
lol2.insert(make_pair(k,y));
}
}
lol1.clear();
}
}else if(command[i]=="EAST"){
if(lol1.empty()){
for(pii t:lol2){
int x=t.first;
int y=t.second;
for(int k=x+1;k<width;k++){
if(mp[k][y]=='X')break;
lol1.insert(make_pair(k,y));
}
}
lol2.clear();
}else{
for(pii t:lol1){
int x=t.first;
int y=t.second;
for(int k=x-1;k<width;k++){
if(mp[k][y]=='X')break;
lol2.insert(make_pair(k,y));
}
}
lol1.clear();
}
}
}
if(lol1.empty()){
for(pii t:lol2){
int x=t.first;
int y=t.second;
mp[x][y]='*'; //标记最终可能的距离点
}
}else{
for(pii t:lol1){
int x=t.first;
int y=t.second;
mp[x][y]='*';
}
}
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
cout<<mp[j][i]; //将地图遍历输出
}
cout<<endl;
}
return 0;
}