1. 程式人生 > >八皇后問題。

八皇后問題。

#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;
}

AC_CODE: