8.19小红书笔试第二题卡9%(bfs做法)
#include <iostream> #include <vector> #include <unordered_map> #include <algorithm> #include <queue> #include <set> using namespace std; unordered_map<string,string> map;//合法的变换 unordered_map<string,string> map1;//合法的变换 bool judge(string st){ string temp; for(int i = st.size()-1;i>=0;i--){ temp.push_back(st[i]); } if(temp == st){ return true; } return false; } int search(string start){ queue<string> que; set<string> visited; que.push(start); visited.insert(start); while(!que.empty()){ int sz = que.size(); for(int u=0;u<sz;++u){ string front = que.front();que.pop(); if(judge(front)){ return 1; } for(int i=0;i<front.size();i++){ string temp; temp.push_back(front[i]); if(!map.count(temp)&&!map1.count(temp)){ continue; } if(map.count(temp) && !map1.count(temp)){ string forward; string back; string addst = forward.assign(front.begin(),front.begin()+i) + map[temp] + back.assign(front.begin()+i+1,front.end()); if(visited.count(addst)==0){ que.push(addst); visited.insert(addst); } continue; } if(!map.count(temp) && map1.count(temp)){ string forward; string back; string addst = forward.assign(front.begin(),front.begin()+i) + map1[temp] + back.assign(front.begin()+i+1,front.end()); if(visited.count(addst)==0){ que.push(addst); visited.insert(addst); } continue; } if(map.count(temp) && map1.count(temp)){ string forward; string back; string addst = forward.assign(front.begin(),front.begin()+i) + map[temp] + back.assign(front.begin()+i+1,front.end()); string addst1 = forward.assign(front.begin(),front.begin()+i) + map1[temp] + back.assign(front.begin()+i+1,front.end()); if(visited.count(addst)==0){ que.push(addst);/*添加下一层待访问的节点*/ visited.insert(addst); } if(visited.count(addst1)==0){ que.push(addst1);/*添加下一层待访问的节点*/ visited.insert(addst1); } } } } } return 0; } int main() { int n; cin>>n; vector<string> vec; vector<int> res; string temp; for(int i=0;i<n;++i){ cin>>temp; vec.push_back(temp); } map["m"] = "nn"; map["w"] = "vv"; map["b"] = "d"; map["p"] = "q"; map["d"] = "b"; map["q"] = "p"; map1["b"] = "q"; map1["q"] = "b"; map1["d"] = "p"; map1["p"] = "d"; map["n"] = "u"; map["u"] = "n"; for(int i=0;i<vec.size();++i){ res.push_back(search(vec[i])); } for(int i=0;i<res.size();++i){ string ss = res[i]==1 ? "YES" : "NO"; cout<<ss<<endl; } return 0; }
路过的大佬帮忙看看,为啥本地用例都对,提交就是9%啊
用的bfs,自己试了好多都是对的,错的测试用例都是啥呀