#include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <stdlib.h > #include <queue> #include <stack> #include <vector> #include <algorithm> #define LL Long Longusing namespace Std;int map[10][10];int vis[10][10];int a[10];int ans[400000][10];void init ()//not present for 1, present as 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 (full array simulation)