markdown 在线制作ppt json校验和格式化工具

POJ 1753

#include <iostream>
#include <queue>
using namespace std;

char _m[4][4];
bool mark[100000];

struct node
{
    int step;
    int state;
};

bool BFS(node p);

bool boo;

node t;

void move(int r)//位操作的改变状态~
{        
    t.state^=(1<<(15-r));
    if(r>=4)
          t.state^=(1<<(15-r+4));
    if(r<=11)
          t.state^=(1<<(15-r-4));    
    if((r%4))
          t.state^=(1<<(15-r+1));
    if(((r+1)%4))
          t.state^=(1<<(15-r-1));
}



queue<node> coll;

int main()
{
    //freopen("acm.acm","r",stdin);
    int i;
    int j;
    node begin;
    begin.state = 0;
    begin.step = 0;

    for(i = 0; i < 4; ++ i)
    {
        for(j = 0; j < 4; ++ j)
        {
            cin>>_m[i][j];
            if(_m[i][j] == 'b')
            {
                begin.state += 1;
            }
            begin.state <<= 1;
        }
        
    }
    begin.state >>= 1;
    memset(mark,false,sizeof(mark));
    if(begin.state == 0 || begin.state == 65535)
    {
        cout<<"0"<<endl;
    }
    else
    {
        coll.push(begin);
        mark[begin.state] = true;
        boo = false;
        while(!coll.empty() && !BFS(coll.front()))
        {
            coll.pop();
        }
        if(!boo)
        {
            cout<<"Impossible"<<endl;
        }
    }

}

bool BFS(node p)
{
//    cout<<p.state<<endl;
    if(p.state == 0 || p.state == 65535)
    {
        boo = true;
        cout<<p.step<<endl;
        return true;
    }
    int i;
    
    for(i = 0; i < 16; ++ i)
    {
        
        t = p;
        move(i);
    //    cout<<t.state<<endl;
        if(!mark[t.state])
        {
            t.step = p.step + 1;
            coll.push(t);
            mark[t.state] = true;
        }
    }

    return false;
}

 

关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

技术网站地址: vmfor.com

posted @ 2015-06-10 16:43  GavinHacker  阅读(151)  评论(0编辑  收藏  举报
markdown 在线制作ppt json校验和格式化工具