//0 1 2 ... 16 void bktk(int lev){ if(lev == n){ // last Number + first Number = 1 if(isPrime[ring[n-1] + 1] == 1){ printf("1"); for(int i=0; i<lev; i++) printf(" %d",ring[i]); printf("\n"); } return; } for(int i=0; i<n; i++){ ring[lev] = num[i]; if(taken[i]) continue; // first number = 1 + last number if(lev == 0 && isPrime[1 + ring[lev]] == 0) continue; if(lev && isPrime[ring[lev-1] + ring[lev]] == 0) continue; taken[i] = 1; bktk(lev+1); taken[i] = 0; } }
int main(){ int t = 0; while(scanf("%d",&n) == 1){ if(t) printf("\n"); printf("Case %d:\n",++t); n--; bktk(0); } return 0; }
int main () { for ( int i = 0; i < 5; i++ ) { for ( int j = 0; j < 5; j++ ) { matrix [i] [j] = 0; } } matrix [0] [1] = matrix [0] [2] = matrix [0] [4] = 1; matrix [1] [0] = matrix [1] [2] = matrix [1] [4] = 1; matrix [2] [0] = matrix [2] [1] = matrix [2] [3] = matrix [2] [4]= 1; matrix [3] [2] = matrix [3] [4] = 1; matrix [4] [0] = matrix [4] [1] = matrix [4] [2] = matrix [4] [3]= 1; bktk (0, 0); return 0; }
void bktk (int at, int cnt) { arr [cnt] = at; if ( cnt == 8 ) { for ( int i = 0; i < 9; i++ ) printf ("%d", arr [i] + 1); printf ("\n"); return; } for ( int i = 0; i < 5; i++ ) { if ( matrix [at] [i] ) { matrix [at] [i] = matrix [i] [at] = 0; bktk (i, cnt + 1); matrix [at] [i] = matrix [i] [at] = 1; } } }