// N−クイーン問題の解をファイルに出力する。 // 出力ファイルはc:\NQueen\q_XX.txt XXには次数Nが入る。Nは4以上12以下 // 次数が10以上は多少時間がかかる #include #include #include #include "TKPermutateA.h" int main() { cout << "N−クイーン問題プログラム(I/O 5月号バージョン)" << endl; cout << "  #:ファイルの出力先はc:\\NQueenです。予め,このフォルダーを作成してください" << endl << endl; cout << "次数?(4以上12以下): " << endl; int num; cin >> num; if (num<4 || num>12) { cout << "次数が範囲外です。プログラムを終了します。" << endl; exit(1); } FILE* fp; char fname[60]; sprintf(fname,"c:\\NQueen\\q_%02d.txt",num); if (fp = fopen(fname,"w"),!fp) { printf("open error !!\n"); exit(1); } TKPermutate p; p.SetSize(num); uchar jun[PMAX]; char buff[100]; int cnt,lim = p.GetFact(num),ctr=0; for (cnt=1;cnt<=lim;cnt++) { p.GetSinglePerm(cnt,jun); if (p.IsQueen(jun)) { p.FormatDigit(jun,buff,','); fprintf(fp,"#%04d:%s\n",++ctr,buff); } } fclose(fp); cout << "計算終了。個数は" << ctr << endl; cout << "何かキーを押してください。" << endl; getchar(); // 入力待ち return 0; }