为什么我这个超时了啊?求大佬指点
#include <iostream>
#include <cstdio>
using namespace std;
int N; // 手指数量
int M; // 加的数字
int res = 0;
int mar[10005];
int arr[10005];
bool st[10005];
bool return0 = false;
void f(int start) {
if (return0) {
return;
}
if (start > N) {
res++;
if (res == M + 1) { // 找到一开始的数就是一
for (int j = 1; j <= N; j++) {
printf("%d ", arr[j]);
}
return0 = true;
}
return;
}
for (int i = 1; i <= N; i++) {
if (!res) {
i = mar[i];
// 不是 out[i] = mar[i]
// 不然后面 if 又改回来
}
if (!st[i]) {
arr[start] = i;
st[i] = true;
f(start + 1);
// 恢复现场
st[i] = false;
}
}
}
int main() {
scanf("%d%d", &N, &M);
for (int i = 1; i <= N; i++) {
scanf("%d", &mar[i]);
}
f(1);
return 0;
}