#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; }
时间: 2024-10-06 12:25:33