zoukankan      html  css  js  c++  java
  • bzoj 1054

    非常明显的广搜,但是为了方便判重,就用了状态压缩来优化。

    虽然代码比较烦,不过逻辑倒是清晰的。可以用宏定义来简化代码。

    #include<cstdio>
    #include<cctype>
    #define f1 f-(1<<i)+(1<<i+4)
    #define f2 f-(1<<i)+(1<<i-4)
    #define f3 f-(1<<i)+(1<<i-1)
    #define f4 f-(1<<i)+(1<<i+1)
    int read(){
        char c; while(!isdigit(c=getchar())); return c-'0';
    }
    int a,b,h,t,q[1<<16],vis[1<<16];
    int main(){
        for(int i=0;i<16;i+=1) a|=read()<<i;
        for(int i=0;i<16;i+=1) b|=read()<<i;
        q[t++]=a; vis[a]=1;
        while(h<t && !vis[b]){
            int f=q[h++];
            for(int i=0;i<16;i+=1)
                if(f&(1<<i)){
                    if(i<12 && !(f&(1<<i+4)) && !vis[f1]) vis[q[t++]=f1]=vis[f]+1;
                    if(i>3 && !(f&(1<<i-4)) && !vis[f2]) vis[q[t++]=f2]=vis[f]+1;
                    if(i%4 && !(f&(1<<i-1)) && !vis[f3]) vis[q[t++]=f3]=vis[f]+1;
                    if(i%4!=3 && !(f&(1<<i+1)) && !vis[f4]) vis[q[t++]=f4]=vis[f]+1;
                }
        }
        printf("%d",vis[b]-1);
        return 0;
    }
  • 相关阅读:
    HDU
    POJ
    POJ
    POJ
    POJ
    POJ
    POJ
    SPFA算法——最短路径
    POJ1251 Jungle Roads Kruskal+scanf输入小技巧
    MongoDB--关于数据库及选择MongoDB的原因
  • 原文地址:https://www.cnblogs.com/AmnesiacVisitor/p/7595387.html
Copyright © 2011-2022 走看看