码迷,mamicode.com
首页 > 其他好文 > 详细

zoj 3861 Valid Pattern Lock(全排列 模拟)

时间:2015-04-21 22:22:16      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

#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...\n",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\n",cnt+1);
        for(i=0;i<=cnt;i++)
        {
            for(j=1;j<=n;j++)
            {
                printf("%d",ans[i][j]);
                if(j!=n) printf(" ");

            }
             printf("\n");
        }
    }
    return 0;
}

  

zoj 3861 Valid Pattern Lock(全排列 模拟)

标签:

原文地址:http://www.cnblogs.com/sola1994/p/4445379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!