zoukankan      html  css  js  c++  java
  • BZOJ054_移动玩具_KEY

    题目传送门

    这道题我写IDA*写挂了,TLE+WA,只AC了两个点。

    这道题标算BFS+状态压缩。

    code:

    /**************************************************************
        Problem: 1054
        User: yekehe
        Language: C++
        Result: Accepted
        Time:84 ms
        Memory:40864 kb
    ****************************************************************/
     
    #include <bits/stdc++.h>
    using namespace std;
     
    int N,T;
     
    const int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
     
    int l[10000000],h,t;
    int f[1<<17];
     
    void BFS()
    {
        memset(f,127,sizeof f);
        l[++t]=N;
        f[N]=0;
            while(h<t){
                int front=l[++h];
                if(front==T){printf("%d",f[front]);return ;}
                        for(int i=0;i<4;i++){
                            if((front&(1<<i))!=(front&(1<<i+4))){
                                int to=front;
                                to^=(1<<i)+(1<<i+4);
                                if(f[to]>f[front]+1)f[to]=f[front]+1,l[++t]=to;
                            }
                            if(i!=3 && (front&(1<<i))!=(front&(1<<i+1))){
                                int to=front;
                                to^=(1<<i)+(1<<i+1);
                                if(f[to]>f[front]+1)f[to]=f[front]+1,l[++t]=to;
                            }
                        }
                        for(int i=4;i<8;i++){
                            if((front&(1<<i))!=(front&(1<<i+4))){
                                int to=front;
                                to^=(1<<i)+(1<<i+4);
                                if(f[to]>f[front]+1)f[to]=f[front]+1,l[++t]=to;
                            }
                            if(i!=7 && (front&(1<<i))!=(front&(1<<i+1))){
                                int to=front;
                                to^=(1<<i)+(1<<i+1);
                                if(f[to]>f[front]+1)f[to]=f[front]+1,l[++t]=to;
                            }
                        }
                        for(int i=8;i<12;i++){
                            if((front&(1<<i))!=(front&(1<<i+4))){
                                int to=front;
                                to^=(1<<i)+(1<<i+4);
                                if(f[to]>f[front]+1)f[to]=f[front]+1,l[++t]=to;
                            }
                            if(i!=11 && (front&(1<<i))!=(front&(1<<i+1))){
                                int to=front;
                                to^=(1<<i)+(1<<i+1);
                                if(f[to]>f[front]+1)f[to]=f[front]+1,l[++t]=to;
                            }
                        }
                        for(int i=12;i<16;i++){
                            if(i!=15 && (front&(1<<i))!=(front&(1<<i+1))){
                                int to=front;
                                to^=(1<<i)+(1<<i+1);
                                if(f[to]>f[front]+1)f[to]=f[front]+1,l[++t]=to;
                            }
                        }
            }
    }
     
    int main()
    {
        string S;
        for(int i=1;i<=4;i++){
            cin>>S;
            for(int j=1;j<=4;j++)N=(N<<1)+S[j-1]-'0';
        }//cin>>S;
        for(int i=1;i<=4;i++){
            cin>>S;
            for(int j=1;j<=4;j++)T=(T<<1)+S[j-1]-'0';
        }
        BFS();
        return 0;
    }
  • 相关阅读:
    JMS(面向消息中间件)
    ActiveMQ消息中间件知识汇总
    linux安装mysql常见命令
    结果集耗尽时,检查是否关闭结果集时常用sql
    Spring注解驱动开发之事务概念
    nginx 基础
    HTTP原理
    MYSQL----cmake 数据库出错
    php安装Phalcon模块
    docker报错 Failed to start Docker Application Container Engine.
  • 原文地址:https://www.cnblogs.com/Cptraser/p/8608002.html
Copyright © 2011-2022 走看看