zoukankan      html  css  js  c++  java
  • poj [1753]

    棋盘的上的每一个状态对应一个二进制串,以初始状态为跟节点建树,然后广度优先遍历这颗树,层数为所求的值。

    #include<iostream>   
    #include<queue>   
    #define ALL_WHITE 0   
    #define ALL_BLACK 65535   
    using namespace std;   
    int states[65536];   
    int state,temp;   
    int flip(int state_current, int pos) {   
        state_current ^= (1 << pos);   
        if (pos - 4 >= 0) {   
            state_current ^= (1 << (pos - 4));   
        }   
        if (pos + 4 < 16) {   
            state_current ^= (1 << (pos + 4));   
        }   
        if (pos % 4 != 0) {   
            state_current ^= (1 << (pos - 1));   
        }   
        if (pos % 4 != 3) {   
            state_current ^= (1 << (pos + 1));   
        }   
        return state_current;   
    }   
    void bfs() {   
        int i;   
        memset(states,-1,sizeof(states));   
        queue<int> q;   
        states[state] = 0;   
        q.push(state);   
        if (state == ALL_BLACK || state == ALL_WHITE){   
            cout<<"0"<<endl;   
            return ;   
        }   
        while(!q.empty()){   
            temp=q.front();   
            q.pop();   
            for(i=0;i<16;i++) {   
                int next_state = flip(temp, i);   
                if (next_state == ALL_BLACK || next_state == ALL_WHITE){   
                    cout<<states[temp]+1<<endl;   
                    return ;   
                }   
                if (states[next_state] == -1){   
                    states[next_state] = states[temp] + 1;   
                    q.push(next_state);   
                }   
            }   
        }   
        cout<<"Impossible"<<endl;   
    }   
    int main(){   
        char c;   
        int i;   
        state = 0;   
        for(i=0; i<16; i++){   
            cin>>c;   
            if(c=='b'){   
                state += 1<<i;   
            }   
            if (c == 'w'){   
                state += 0<<i;   
            }   
        }   
        bfs();   
        return 0;   
    }



  • 相关阅读:
    数据结构(java语言描述)顺序栈的使用(两个大数相加)
    DB2 Sql性能查看与优化
    spring默认为单例模式
    Java map的匿名类的初始化
    使用nohup后台执行ftp传输命令
    停止一个java的线程执行
    静态类
    XML语法随记
    Crontab有关
    string转Date转回String(JAVA)
  • 原文地址:https://www.cnblogs.com/yancey/p/3371362.html
Copyright © 2011-2022 走看看