本文转自微软何海涛的微博。微博网址:http://zhedahht.blog.163.com/
直接上代码:
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int g_number = 0;//全局变量,记录解法的总数
void Permutation(int ColumnIndex[], int length, int index);
bool Check(int ColumnIndex[], int length);
void PrintQueen(int ColumnIndex[], int length);
void EightQueen()
{
const int queens = 8;
int ColumnIndex[queens];
for (int i = 0; i < queens; i++)
ColumnIndex[i] = i;
Permutation(ColumnIndex, queens, 0);//全排列
}
void Permutation(int ColumnIndex[], int length, int index)
{
if (index == length)
{
if (Check(ColumnIndex, length))//检测某一个全排列是否满足条件
{
++g_number;
PrintQueen(ColumnIndex, length);//打印出满足条件的解
}
}
else
{
for (int i = index; i < length; i++)
{
int temp = ColumnIndex[i];
ColumnIndex[i] = ColumnIndex[index];
ColumnIndex[index] = temp;
Permutation(ColumnIndex, length, index + 1);
temp = ColumnIndex[index];
ColumnIndex[index] = ColumnIndex[i];
ColumnIndex[i] = temp;
}
}
}
bool Check(int ColumnIndex[], int length)//检测某一个全排列是否满足条件
{
for (int i = 0; i < length; i++)
{
for (int j = i + 1; j < length; j++)
{
if (abs(i - j) == abs(ColumnIndex[i] - ColumnIndex[j]))
return false;
}
}
return true;
}
void PrintQueen(int ColumnIndex[], int length)//打印出满足条件的全排列
{
cout << "Solution " << g_number << endl;
for (int i = 0; i < length; i++)
cout << ColumnIndex[i] << ' ';
cout << endl;
}
void main()
{
EightQueen();
cin.get();
}