最后一个显示超过了时间,但是我怎么也优化不了,求大佬帮帮我
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<vector>
#include<math.h>
using namespace std;
int n, num = 0;
vector<int> seat;
void dfs(int row) {
if (row >= n) return;
if (seat.size() < row) return;
for (int i = 0; i < n; i++)
{
int r = 0; bool isok = 1;
if (seat.size() == 0) {
seat.push_back(i);
dfs(row + 1);
seat.pop_back();
continue;
}
else
for (auto x : seat)
{
if (i == x || abs(x - i) == abs(r - row)) {
isok = 0;
break;
}
r++;
}
if (isok) {
seat.push_back(i);
if (seat.size() >= n) {
num++;
if (num <= 3) {
for (int j = 0; j < seat.size(); j++)
{
cout << seat[j] + 1;
if (j != n - 1) cout << " ";
}
cout << endl;
}
seat.pop_back();
return;
}
else {
dfs(row + 1);
seat.pop_back();
}
}
}
}
int main()
{
cin >> n;
dfs(0);
cout << num << endl ;
return 0;
}