zoj 1050 bfs

来源:互联网 发布:阿里云深圳机房 编辑:程序博客网 时间:2024/06/05 18:28
#include <queue>#include <stdio.h>#include <iostream>using namespace std;struct rec {     int n, m; };int main() {    int N;    cin >> N;    while(N--) {        int n = 0;        char c;        for(int i = 0; i < 16; i++) {            cin.get( c );            if( c == '\n' ) {                i--;                continue;            }            if( c == 'b' ) n |= (1 << i);        }        rec cur = {n, 0};        queue <rec> q;        q.push(cur);        bool repeat[65536] = {false}, find = false;        while(q.empty() == false ) {            cur = q.front();            q.pop();            if(cur.n == 0 || cur.n == 65535) {                cout << cur.m << endl;                find = true;                break;            }             for(int i = 0; i < 16; i++) {//因为在每一步都有十六种选择                  int t = cur.n;                 t ^= (1 << i);//////////////////////////////////////第i个点的变化                  if(i - 4 >= 0)     t ^= (1 << (i - 4));////////////周围四个点的变化                  if(i + 4 < 16)     t ^= (1 << (i + 4));                 if(i % 4 - 1 >= 0) t ^= (1 << (i - 1));                 if(i % 4 + 1 < 4) t ^= (1 << (i + 1));                 if(repeat[t] == false) {                     repeat[t] = true;                     rec tmp = {t, cur.m + 1};                    q.push(tmp);                 }             }         }         if(find == false) cout << "Impossible" << endl;         if(N) cout << endl;    }    return 0;}

// 尼玛为什么别人都能这么容易想出来,尼玛我为什么这么弱啊。。。。。