Sicily 1048 Inverso

按照題意廣搜,注意輸入"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;
}                             


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章