求解这个n=13的时候,我的程序超时,但是不知道怎么改
查看原帖
求解这个n=13的时候,我的程序超时,但是不知道怎么改
431815
罗权楼主2021/9/6 10:27
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
int a[20];
int n;
int sum = 0;
void show() {
    for (int i = 0; i < n; i++) {
        printf("%d ", a[i]+1);
    }
    printf("\n");
}
bool place(int i, int j) {
    if (i == 0) return true;
    else {
        int k = 0;
        while (k < i) {
            if (j == a[k] || abs(k - i) == abs(a[k] - j)) {
                return false;
            }
            k++;
        }
        return true;
    }
}
void queen(int i) {
    if (i > n - 1) {
        if (sum++ < 3) {
            show();
        }
    }
    else {
        for (int j = 0; j < n; j++) {
            if (place(i, j)) {
                a[i] = j;
                queen(i + 1);//探索下一行
            }
        }
    }
}
int main() {
    cin >> n;
    queen(0);
    printf("%d", sum);
    return 0;
}

这是按照我们算法书上写的,为什么会超时吗?

2021/9/6 10:27
加载中...