#include /*----------------------------------------------------*/ int LETSU[14]; /* カードを並べる列 */ int count; /* 解の個数 */ /* 解答を表示する */ void display() { int i; printf("%d)",++count); for (i=0; i<14; i++) printf("%d",LETSU[i]); printf("\n"); } /* No.pのカードをバックトラックで置く */ void backtrack(int p) { int i; /* 左カードの位置 */ int j; /* 右カードの位置 */ if (p > 7) { /* 総てのカードが置かれている */ display(); } else { for (i=0,j=p+1; j<14; i++,j++) { if (LETSU[i]==0 && LETSU[j]==0) { /* カードを置けるなら */ LETSU[i] = LETSU[j] = p; /* カードを置く */ backtrack(p+1); /* 次のカードへ */ LETSU[i] = LETSU[j] = 0; /* 状態を元に戻す */ } } } } /*----------------------------------------------------*/ void main() { backtrack(1); }