zoukankan      html  css  js  c++  java
  • zoj 3861 Valid Pattern Lock(全排列 next_permutation 模拟)

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<stdlib.h>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<algorithm>
    #define LL long long
    using namespace std;
    int map[10][10];
    int vis[10][10];
    int a[10];
    int ans[400000][10];
    void init()//不存在为1,存在为0
    {
        map[1][3]=map[3][1]=1;
        map[1][9]=map[9][1]=1;
        map[1][7]=map[7][1]=1;
        map[2][8]=map[8][2]=1;
        map[3][7]=map[7][3]=1;
        map[3][9]=map[9][3]=1;
        map[4][6]=map[6][4]=1;
        map[7][9]=map[9][7]=1;
    }
    
    void panduan(int i)
    {
        if(i==2||i==8)
        {
            vis[i-1][i+1]=vis[i+1][i-1]=1;
        }
        else if(i==4||i==6)
        {
            vis[i-3][i+3]=vis[i+3][i-3]=1;
        }
        else if(i==5)
        {
            vis[1][9]=vis[9][1]=1;
            vis[2][8]=vis[8][2]=1;
            vis[3][7]=vis[7][3]=1;
            vis[4][6]=vis[6][4]=1;
        }
                        /*if(a[1]==5&&a[2]==4&&a[3]==3&&a[4]==1)
                    {
                        if(vis[1][3]==1) printf("%d...
    ",i);
                    }*/
    
    
    }
    
    int main()
    {
        int kase,n;
        int i,j,k;
        scanf("%d",&kase);
        while(kase--)
        {
            memset(map,0,sizeof(map));
            int cnt=-1;
            init();
            scanf("%d",&n);
            for( i=1;i<=n;i++) scanf("%d",&a[i]);
            sort(a+1,a+n+1);
            do
            {
                //if(a[1]==5&&a[2]==4&&a[3]==3&&a[4]==1)
                memset(vis,0,sizeof(vis));
                for( i=1;i<n;i++)
                {
                    panduan(a[i]);
                    if(map[a[i]][a[i+1]]==1&&vis[a[i]][a[i+1]]==0) break;
                }
                if(i==n)
                {
                    cnt++;
                    for(i=1;i<=n;i++)
                    {
                        ans[cnt][i]=a[i];
                    }
                }
    
            }while(next_permutation(a+1,a+n+1));
    
            printf("%d
    ",cnt+1);
            for(i=0;i<=cnt;i++)
            {
                for(j=1;j<=n;j++)
                {
                    printf("%d",ans[i][j]);
                    if(j!=n) printf(" ");
    
                }
                 printf("
    ");
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    C# Func的同步、异步调用
    C#以管理员身份运行程序
    C# 代码编程规范
    C# DES加密解密
    C# MD5加密
    EntityFramework查询--联合查询(Join,GroupJoin)
    C# 图片和Base64之间的转换
    php 验证身份证号
    Vue环境搭建
    PHP 3种方法实现采集网站数据
  • 原文地址:https://www.cnblogs.com/sola1994/p/4445379.html
Copyright © 2011-2022 走看看