// ■ 8王妃(eight qeen)問題 // N×Nの正方形のチェス盤の升目にどのクイーンも // 同じ行,同じ列,斜めにならないよう置く問題です。 // // 【解答例】 // 1 2 3 4 5 6 7 8 // ┏━┯━┯━┯━┯━┯━┯━┯━┓ // 1┃Q│ │ │ │ │ │ │ ┃ // ┠─┼─┼─┼─┼─┼─┼─┼─┨ // 2┃ │ │ │ │Q│ │ │ ┃ // ┠─┼─┼─┼─┼─┼─┼─┼─┨ // 3┃ │ │ │ │ │ │ │Q┃ // ┠─┼─┼─┼─┼─┼─┼─┼─┨ // 4┃ │ │ │ │ │Q│ │ ┃ // ┠─┼─┼─┼─┼─┼─┼─┼─┨ // 5┃ │ │Q│ │ │ │ │ ┃ // ┠─┼─┼─┼─┼─┼─┼─┼─┨ // 6┃ │ │ │ │ │ │Q│ ┃ // ┠─┼─┼─┼─┼─┼─┼─┼─┨ // 7┃ │Q│ │ │ │ │ │ ┃ // ┠─┼─┼─┼─┼─┼─┼─┼─┨ // 8┃ │ │ │Q│ │ │ │ ┃ // ┗━┷━┷━┷━┷━┷━┷━┷━┛ // #include "stdio.h" #include "conio.h" #define NSIZE 8 #define NSIZE1 NSIZE - 1 #define NSIZE2 NSIZE + NSIZE1 int Number; // 解番号 bool A[NSIZE]; // 桁位置に王妃配置可能 i 行目は A[i] bool B[NSIZE2]; // 右上がり斜め(/)位置に配置可能 i 行 j 列は B[i+j] bool C[NSIZE2]; // 右上がり斜め(\)位置に配置可能 i 行 j 列は C[i-j+7] int X[NSIZE]; // 王妃配置桁位置。配列添え字は行番号 bool stopCheck(){//■停止判定 printf("\n** 続行しますか?(Y/N)"); char ch=getch(); while(ch!='Y' && ch!='y' && ch!='N' && ch!='n') ch=getch(); return ch=='N' || ch=='n'; } bool dspCells(){ //■配置結果の表示 Number++; printf("\n\n解 %d\n",Number); for(int i=0;i