zoukankan      html  css  js  c++  java
  • xxx

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    //#include<set>
    //#include<time.h>
    #include<math.h>
    //#include<assert.h>
    //#include<queue>
    //#include<iostream>
    using namespace std;
    
    typedef int Sta[11];
    char s[11][9];
    bool vis[370011];int dis[370011],kt[370011];
    Sta que[370011];int head,tail;
    int inque(const Sta &nn)
    {
        if (ok(nn)) return d+1;
        memcpy(que[tail],nn,sizeof(Sta));
        kt[tail]=kang(nn);
        dis[tail]=d+1;
        vis[kt[tail]]=1;
        tail++;
        return -1;
    }
    bool you1(Sta nn)
    {
        if (s[nn[1]][4]=='1' || s[nn[2]][4]=='1' || s[nn[3]][4]=='1') return 0;
        swap(nn[3],nn[2]); swap(nn[2],nn[1]); return 1;
    }
    bool you2(Sta nn)
    {
        if (s[nn[4]][4]=='1' || s[nn[5]][4]=='1' || s[nn[6]][4]=='1') return 0;
        swap(nn[6],nn[5]); swap(nn[5],nn[4]); return 1;
    }
    bool you3(Sta nn)
    {
        if (s[nn[7]][4]=='1' || s[nn[8]][4]=='1' || s[nn[9]][4]=='1') return 0;
        swap(nn[9],nn[8]); swap(nn[8],nn[7]); return 1;
    }
    bool zuo1(Sta nn)
    {
        if (s[nn[1]][4]=='1' || s[nn[2]][4]=='1' || s[nn[3]][4]=='1') return 0;
        swap(nn[1],nn[2]); swap(nn[2],nn[3]); return 1;
    }
    bool zuo2(Sta nn)
    {
        if (s[nn[4]][4]=='1' || s[nn[5]][4]=='1' || s[nn[6]][4]=='1') return 0;
        swap(nn[4],nn[5]); swap(nn[5],nn[6]); return 1;
    }
    bool zuo3(Sta nn)
    {
        if (s[nn[7]][4]=='1' || s[nn[8]][4]=='1' || s[nn[9]][4]=='1') return 0;
        swap(nn[7],nn[8]); swap(nn[8],nn[9]); return 1;
    }
    bool shang1(Sta nn)
    {
        if (s[nn[1]][4]=='1' || s[nn[4]][4]=='1' || s[nn[7]][4]=='1') return 0;
        swap(nn[1],nn[4]); swap(nn[4],nn[7]); return 1;
    }
    bool shang2(Sta nn)
    {
        if (s[nn[2]][4]=='1' || s[nn[5]][4]=='1' || s[nn[8][4]=='1') return 0;
        swap(nn[2],nn[5]); swap(nn[5],nn[8]); return 1;
    }
    bool shang3(Sta nn)
    {
        if (s[nn[3]][4]=='1' || s[nn[6]][4]=='1' || s[nn[9][4]=='1') return 0;
        swap(nn[3],nn[6]); swap(nn[6],nn[9]); return 1;
    }
    bool xia1(Sta nn)
    {
        if (s[nn[1]][4]=='1' || s[nn[4]][4]=='1' || s[nn[7]][4]=='1') return 0;
        swap(nn[7],nn[4]); swap(nn[4],nn[1]); return 1;
    }
    bool xia2(Sta nn)
    {
        if (s[nn[2]][4]=='1' || s[nn[5]][4]=='1' || s[nn[8][4]=='1') return 0;
        swap(nn[8],nn[5]); swap(nn[5],nn[2]); return 1;
    }
    bool xia3(Sta nn)
    {
        if (s[nn[3]][4]=='1' || s[nn[6]][4]=='1' || s[nn[9][4]=='1') return 0;
        swap(nn[9],nn[6]); swap(nn[6],nn[3]); return 1;
    }
    int kang(Sta nn)
    {
        int ans=0;
        for (int i=1;i<=9;i++)
        {
            int tmp=0;
            for (int j=i+1;j<=9;j++)
                if (a[j]<a[i]) tmp++;
            ans+=tmp*fac[9-i];
        }
        return ans;
    }
    bool mark[11][4],col[4];
    void dfs(int i,int j,int nowcol)
    {
        mark[i][j]=1;
        if (j==0 || j==1)
        {
            if (!mark[i][2] && getcol(s[nn[i]][2])==nowcol) dfs(i,2,nowcol);
            if (!mark[i][3] && getcol(s[nn[i]][3])==nowcol) dfs(i,3,nowcol);
        }
        if (j==2 || j==3)
        {
            if (!mark[i][1] && getcol(s[nn[i]][1])==nowcol) dfs(i,1,nowcol);
            if (!mark[i][0] && getcol(s[nn[i]][0])==nowcol) dfs(i,0,nowcol);
        }
        if (i!=3 && i!=6 && i!=9 && j==3) dfs(i+1,2,nowcol);
        if (i!=1 && i!=4 && i!=7 && j==2) dfs(i-1,3,nowcol);
        if (i!=1 && 
    bool ok(Sta nn)
    {
        memset(mark,0,sizeof(mark));
        memset(col,0,sizeof(col));
        for (int i=1;i<=9;i++)
            for (int j=0;j<4;j++)
                if (!mark[i][j])
                {
                    int nowcol=getcol(s[nn[i]][j]);
                    if (col[nowcol]) return 0;
                    col[nowcol]=1;
                    dfs(i,j,nowcol);
                }
    }
    int bfs()
    {
        head=0;tail=1;for (int i=1;i<=9;i++) que[0][i]=i;
        memset(vis,0,sizeof(vis));
        kt[0]=kang(que[0]);
        dis[0]=0;vis[kt[0]]=1;
        if (ok(que[0])) return 0;
        while (head!=tail)
        {
            Sta now;memcpy(now,que[head],sizeof(Sta));const int d=dis[head];head++;
            Sta nn;int tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (you1(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (you2(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (you3(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (zuo1(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (zuo2(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (zuo3(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (shang1(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (shang2(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (shang3(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (xia1(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (xia2(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
            
            memcpy(nn,now,sizeof(Sta));
            if (xia3(nn)) if (!vis[kang(nn)]) if ((tmp=inque(nn))>=0) return tmp;
        }
    }
    int main()
    {
        for (int i=1;i<=9;i++) scanf("%s",s[i]);
        fac[0]=1;for (int i=1;i<=9;i++) fac[i]=fac[i-1]*i;
        printf("%d
    ",bfs());
        return 0;
    }
  • 相关阅读:
    Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
    JS使用Cookie
    vue2 生命周期
    vue2 手记
    vue2 design 手记
    composer.json详解
    mysql查询优化
    dockerfile
    一套不错的docker lnmp
    服务器部署docker lnmp环境
  • 原文地址:https://www.cnblogs.com/Blue233333/p/7704317.html
Copyright © 2011-2022 走看看