// Queue8.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "iostream"
#include "vector"
#include "stack"
using namespace std;
void Queue(int queue[], int k, int n,int & num);
void swap(int arr[], int i, int j);
int _tmain(int argc, _TCHAR* argv[])
{
int queue[8];
for(int i = 0; i < 8; i++)
queue[i] = i;
int num = 0;
Queue(queue, 0, 8, num);
cout<<"所有的可能:"<<num<<endl;
system("pause");
return 0;
}
void Queue(int queue[], int k, int n,int & num)
{
if(k == n)
{
// 获得一种全排列
// 判断是否有冲突
bool flag = true;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
if(i == j) continue;
if(((i-j) == (queue[i] - queue[j]))||((j - i) == (queue[i] - queue[j])))
{
flag = false;
break;
}
}
if(flag == false) break;
}
if(flag) num++;
for(int i = 0; i < n; i++)
{
printf("%3d", queue[i]);
}
printf("\n");
return;
}
for(int i = k; i < n; i++)
{
swap(queue, k, i);
Queue(queue, k + 1, n, num);
swap(queue, i, k);
}
}
void swap(int arr[], int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
八皇后问题,求解的个数
最新推荐文章于 2021-10-31 11:08:22 发布