超时了!
查看原帖
超时了!
1471954
slllll楼主2024/10/24 19:07

为什么我这个超时了啊?求大佬指点

#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;
}
2024/10/24 19:07
加载中...