问题描述:n个元素,任意两个不在同一行同一列,且不在对角线上的可能性。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int sum = 0;
int visit[100000];
//int p[100000];
vector<int> v; //v[pos]=des 表示第pos个存放des数,这里可以理解成:存放在第pos行第des列
void fun(int index, int n)
{
if (index == n) {
bool flag = true;
for (int i = 0; i < n; i++) { //第i行
for (int j = i + 1; j < n; j++) { //第j行
if (abs(i - j) == abs(v[i] - v[j])) { //任意两行的列数==行数
flag = false;
}
}
}
if (flag) {
cout << ++sum << ": ";
for (int i = 0; i < n; i++) {
cout << v[i] << " ";
}
cout << endl;
return;
}
}
//回溯法
for (int i = 1; i <= n; i++) {
if (visit[i] == 0) {
visit[i] = 1;
//p[index] = i;
v.push_back(i);
fun(index + 1, n);
v.pop_back();
visit[i] = 0;
}
}
}
int main()
{
int n;
cin >> n;
fun(0, n);
return 0;
}
``