WA 求调
查看原帖
WA 求调
322792
Alea楼主2024/7/11 17:36

获得 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;
}
2024/7/11 17:36
加载中...