获得 WA,且 udebug 数据全部通过。
谢谢!
#include <bits/stdc++.h>
using namespace std;
int sr,sc,gr,gc;
char sd;
string re[10][10][4];
bool vis[10][10][4];
char i2nesw(int x){
switch(x){
case 0:return 'N';
case 1:return 'E';
case 2:return 'S';
case 3:return 'W';
}
return -0x3f3f3f3f;
}
int nesw2i(char c){
switch(c){
case 'N':return 0;
case 'E':return 1;
case 'S':return 2;
case 'W':return 3;
}
return -0x3f3f3f3f;
}
pair<int,int> nesw2dpm(char c){
switch(c){
case 'N':return make_pair(-1,0);
case 'E':return make_pair(0,1);
case 'S':return make_pair(1,0);
case 'W':return make_pair(0,-1);
}
return make_pair(-0x3f3f3f3f,-0x3f3f3f3f);
}
char lfr2nesw(char fo,char ro){
if(fo=='N'){
switch(ro){
case 'L':return 'E';
case 'F':return 'S';
case 'R':return 'W';
}
return -0x3f3f3f3f;
}else if(fo=='E'){
switch(ro){
case 'L':return 'S';
case 'F':return 'W';
case 'R':return 'N';
}
return -0x3f3f3f3f;
}else if(fo=='S'){
switch(ro){
case 'L':return 'W';
case 'F':return 'N';
case 'R':return 'E';
}
return -0x3f3f3f3f;
}else if(fo=='W'){
switch(ro){
case 'L':return 'N';
case 'F':return 'E';
case 'R':return 'S';
}
return -0x3f3f3f3f;
}
return -0x3f3f3f3f;
}
char opposnesw(char c){
switch(c){
case 'N':return 'S';
case 'E':return 'W';
case 'S':return 'N';
case 'W':return 'E';
}
return -0x3f3f3f3f;
}
vector<pair<int,int>> res,ans;
void dfs(int r,int c,int fo){
// cerr<<r<<" "<<c<<" "<<i2nesw(fo)<<endl;
if(vis[r][c][fo]) return;
res.push_back(make_pair(r,c));
vis[r][c][fo]=true;
if(r==gr&&c==gc){
if(ans.size()==0||ans.size()>res.size()) ans=res;
return;
}
string shif=re[r][c][fo];
int ln=shif.length();
for(int i=0;i<ln;++i){
char to=lfr2nesw(i2nesw(fo),shif[i]);
dfs(r+nesw2dpm(to).first,c+nesw2dpm(to).second,nesw2i(opposnesw(to)));
if(ans.size()!=0) break;
}
res.pop_back();
vis[r][c][fo]=false;
}
void solve(){
memset(vis,0,sizeof vis);
for(int i=0;i<10;++i) for(int j=0;j<10;++j) for(int k=0;k<4;++k) re[i][j][k]="";
cin>>sr>>sc>>sd>>gr>>gc;
int r,c;
while(cin>>r&&r!=0){
cin>>c;
for(int i=0;i<4;++i) re[r][c][i]="";
string ri;
while(cin>>ri&&ri!="*") re[r][c][nesw2i(opposnesw(ri[0]))]=ri.substr(1);
}
ans.clear();
res.clear();
res.push_back(make_pair(sr,sc));
dfs(sr+nesw2dpm(sd).first,sc+nesw2dpm(sd).second,nesw2i(opposnesw(sd)));
if(ans.size()==0) cout<<" No Solution Possible"<<endl;
else{
cout<<" ";
int ouc=0;
for(auto ie:ans){
if(ouc%10==0&&ouc!=0) cout<<endl<<" ";
cout<<" ("<<ie.first<<","<<ie.second<<")";
++ouc;
}
cout<<endl;
}
}
int main(){
ios::sync_with_stdio(false);
string name;
while(cin>>name&&name!="END") cout<<name<<endl,solve();
return 0;
}