首页 > 其他 > 详细

poj 2965 The Pilots Brothers' refrigerator[ 枚举 ]

时间:2015-02-09 23:12:55      阅读:459      评论:0      收藏:0      [点我收藏+]

传送门:http://poj.org/problem?id=2965

思路:二进制枚举,递归输出路径。G++ 900+Ms勉强过,C++超时。

技术分享


代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;

typedef long long LL;
const int N=100007;

int vis[N];
int step[N][4];

int change(int state,int i,int j)
{
    for(int k=0;k<4;k++)
    {
        state=state^1<<(4*k+j);
        state=state^1<<(4*i+k);
    }
    state=state^1<<(i*4+j);
    return state;
}

void output(int state)
{
    if(step[state][0]==0)
        return;
    else{
        output(step[state][1]);
        printf("%d %d\n",step[state][2],step[state][3]);
    }
}

void bfs(int state)
{
    queue<int> que;
    que.push(state);
    while(!que.empty())
    {
        int cur=que.front();
        que.pop();
        if(cur==65535)
        {
            printf("%d\n",step[65535][0]);
            output(65535);
            break;
        }
        for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                int tmp=change(cur,i,j);
                if(!vis[tmp])
                {
                    vis[tmp]=1;
                    step[tmp][0]=step[cur][0]+1;
                    step[tmp][1]=cur;
                    step[tmp][2]=i+1;
                    step[tmp][3]=j+1;
                    que.push(tmp);
                }
            }
        }

    }
}




int main()
{
    //mem(vis,0);
    //mem(step,0);
    int state=0;
    for(int i=0;i<16;i++)
    {
        char c;
        cin>>c;
        if(c=='-')
        {
            state=state|1<<i;
        }
    }
    vis[state]=1;
    bfs(state);
    return 0;
}


poj 2965 The Pilots Brothers' refrigerator[ 枚举 ]

原文:http://blog.csdn.net/code_or_code/article/details/43673563

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!