按照題意廣搜,注意輸入"wwwwwwwww"時輸出11就可以了。
#include <iostream>
using namespace std;
#include <string>
#include <deque>
#include <bitset>
#include <memory.h>
deque<int> q;
int parent[512];
int parent_step[512];
int flip1(bitset<9> b) {
b.flip(9-1);
b.flip(9-2);
b.flip(9-4);
b.flip(9-5);
return b.to_ulong();
}
int flip2(bitset<9> b) {
b.flip(9-1);
b.flip(9-2);
b.flip(9-3);
b.flip(9-4);
b.flip(9-5);
b.flip(9-6);
return b.to_ulong();
}
int flip3(bitset<9> b) {
b.flip(9-2);
b.flip(9-3);
b.flip(9-5);
b.flip(9-6);
return b.to_ulong();
}
int flip4(bitset<9> b) {
b.flip(9-1);
b.flip(9-2);
b.flip(9-4);
b.flip(9-5);
b.flip(9-7);
b.flip(9-8);
return b.to_ulong();
}
int flip5(bitset<9> b) {
b.flip(9-1);
b.flip(9-2);
b.flip(9-3);
b.flip(9-4);
b.flip(9-5);
b.flip(9-6);
b.flip(9-7);
b.flip(9-8);
b.flip(9-9);
return b.to_ulong();
}
int flip6(bitset<9> b) {
b.flip(9-2);
b.flip(9-3);
b.flip(9-5);
b.flip(9-6);
b.flip(9-8);
b.flip(9-9);
return b.to_ulong();
}
int flip7(bitset<9> b) {
b.flip(9-4);
b.flip(9-5);
b.flip(9-7);
b.flip(9-8);
return b.to_ulong();
}
int flip8(bitset<9> b) {
b.flip(9-4);
b.flip(9-5);
b.flip(9-6);
b.flip(9-7);
b.flip(9-8);
b.flip(9-9);
return b.to_ulong();
}
int flip9(bitset<9> b) {
b.flip(9-5);
b.flip(9-6);
b.flip(9-8);
b.flip(9-9);
return b.to_ulong();
}
int main() {
int i, tmp, t, n;
string s;
bitset<9> bits;
q.clear();
for (i=0;i<512;i++) {
parent[i]=-1;
}
parent[0]=-2;
q.push_back(bits.to_ulong());
while (!q.empty()) {
tmp=q.front();
q.pop_front();
t = flip9(tmp);
if (parent[t]==-1) {
parent[t]=tmp;
parent_step[t]=9;
q.push_back(t);
}
t = flip8(tmp);
if (parent[t]==-1) {
parent[t]=tmp;
parent_step[t]=8;
q.push_back(t);
}
t = flip7(tmp);
if (parent[t]==-1) {
parent[t]=tmp;
parent_step[t]=7;
q.push_back(t);
}
t = flip6(tmp);
if (parent[t]==-1) {
parent[t]=tmp;
parent_step[t]=6;
q.push_back(t);
}
t = flip5(tmp);
if (parent[t]==-1) {
parent[t]=tmp;
parent_step[t]=5;
q.push_back(t);
}
t = flip4(tmp);
if (parent[t]==-1) {
parent[t]=tmp;
parent_step[t]=4;
q.push_back(t);
}
t = flip3(tmp);
if (parent[t]==-1) {
parent[t]=tmp;
parent_step[t]=3;
q.push_back(t);
}
t = flip2(tmp);
if (parent[t]==-1) {
parent[t]=tmp;
parent_step[t]=2;
q.push_back(t);
}
t = flip1(tmp);
if (parent[t]==-1) {
parent[t]=tmp;
parent_step[t]=1;
q.push_back(t);
}
}
cin >> n;
while (n--) {
cin >> s;
if (s=="wwwwwwwww") {
cout<<"11\n";
continue;
}
bits.reset();
for (i=0;i<s.length();i++) {
if (s[i]=='b')
bits.flip(9-i-1);
}
q.clear();
t=bits.to_ulong();
while (parent[t]!=-2) {
//cout << parent_step[t];
q.push_back(parent_step[t]);
t=parent[t];
}
for (i=0;i<q.size();i++)
cout << q[i];
cout << endl;
}
return 0;
}