前言:
21考研,正在啃《算法笔记》,不论能否进复试记录一下准备路上写下的垃圾代码。
解答:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
bool hashtab[11] = { false };
int res[11];
int ct = 0;
void generatep(int done,int n) {
if (done == n) {
bool flag = true;
for (int i = 1; i < n; i++)
for (int j = i + 1; j <= n; j++)
if (abs(i - j) == abs(res[i] - res[j]))
flag = false;
if (flag) {
for (int i = 1; i <= n; i++)
printf("%d ", res[i]);
ct++;
printf("\n");
}
}
else {
for (int i = 1; i <= n; i++) {
if (hashtab[i] == false) {
res[done+1] = i;
hashtab[i] = true;
generatep(done + 1, n);
hashtab[i] = false;
}
}
}
}
int main() {
int n;
while (scanf("%d",&n)!=EOF) {
generatep(0, n);
if (ct == 0)
printf("no solute!\n");
ct = 0;
}
return 0;
}