排列树:N皇后问题
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void swap(vector<int>& arr,int i, int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
bool judge(vector<int>& arr, int i)
{
for (int j = 0; j < i; j++)
{
if (i == j || arr[i] == arr[j] || abs(i - j)== abs(arr[i] - arr[j]))
{
return false;
}
}
return true;
}
int cnt = 0;
void func(vector<int>& arr, int i, int length)
{
if (i == length)
{
cnt++;
for (int j = 0; j < length; j++)
{
cout << arr[j] << " ";
}
cout << endl;
}
else
{
for (int k = i; k < length; k++)
{
swap(arr, k, i);
if(judge(arr,i))
func(arr,i + 1, length);
swap(arr, k, i);
}
}
}
int main()
{
int n = 8;
vector<int> arr(n);
for (int i = 0; i < n; i++)
{
arr[i] = i+1;
}
func(arr, 0, n);
cout << cnt << endl;
}