码迷,mamicode.com
首页 > 其他好文 > 详细

bfs-poj1753

时间:2016-12-17 11:40:18      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:indicator   images   alt   nbsp   .com   display   for   数组   i++   

http://poj.org/problem?id=1753

简单的一个bfs,棋盘状态用一个无符号十六位short存储,每一个0或1代表白与黑,改变用位运算,change数组中存储了十六种改变.

棋盘状态=0或65535即每位都是0或每位都是1时结束

技术分享
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
using namespace std;
short flag[65536]={0};
unsigned short change[16]={
    51200,
    58368,
    29184,
    12544,
    35968,
    20032,
    10016,
    4880,
    2248,
    1252,
    626,
    305,
    140,
    78,
    39,
    19
};
queue<unsigned short> q;
queue<unsigned short> cq;
unsigned short bfs(){
    unsigned short p=q.front(),cp=cq.front();
    q.pop();
    cq.pop();
    if(flag[p]){
        return 65535;
    }
    flag[p]=1;
    if(p==0 || p==65535){
        return cp; 
    }else{
        cp++;
        for(int i=0;i<16;i++){
            q.push(p^change[i]);
            cq.push(cp);
        }
    }
    return 65535;
}
int main(){
    unsigned short head=0;
    char tmp;
    for(int i=0;i<16;i++){
        cin>>tmp;
        if(tmp==b){
            head=head|(1<<i);
        }
    }
    q.push(head);
    cq.push(0);
    int k=bfs();
    while(k==65535 && q.size()){
        k=bfs();
    }
    if(k!=65535){
        printf("%d\n",k);
    }else{
        printf("Impossible\n");
    }
    return 0;
}
View Code

 

bfs-poj1753

标签:indicator   images   alt   nbsp   .com   display   for   数组   i++   

原文地址:http://www.cnblogs.com/maggch/p/6189192.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!