八皇后問題。
阿新 • • 發佈:2018-11-19
#include<bits/stdc++.h> using namespace std; int book[92][9], mark[9], cnt = 0; //book記錄全部解,mark記錄當前解; bool range[9], line1[17], line2[17]; //分別記錄列方向,45度,135度方向上被控制的情況 bool isok(int i,int j) { return range[j] || line1[i + j] || line2[i - j + 9]; } void tryToPut(int i) { if (i > 8) { //如果最後一個皇后被放置完畢,將當前解複製到全部解中 for (int k = 1; k <=8; k++) { book[cnt][k] = mark[k]; cout << book[cnt][k]; } cnt++; cout << endl; } for (int j = 1; j <= 8; j++) { if (!isok(i,j)) { //如果與前面的不衝突,//則把當前皇后放置在當前位置 mark[i] = j; range[j] = line1[i + j] = line2[i - j + 9] = 1; tryToPut(i + 1); range[j] = line1[i + j] = line2[i - j + 9] = 0; } } } void main() { tryToPut(1); cout <<"Cnt:"<< cnt; }