这个时间复杂度是O(n!*n!)吗?
查看原帖
这个时间复杂度是O(n!*n!)吗?
218974
wsadjkl0楼主2021/5/25 16:54

思路就是每放一个就检查一遍和之前已经放的是否有冲突,然后最后一个TLE了

#include<bits/stdc++.h>
using namespace std;

int a[15];
int n, ans = 0;
void dfs(int k){
	if(k > n) {
		ans++;
		if(ans <= 3){
			for(int i = 1; i <= n; i++)
				printf("%d ", a[i]);
			puts("");
		}
		return;
	}
	for(int i = 1; i <= n; i++){
		if(k == 1) {a[k] = i; dfs(k+1);}
		else{
			a[k] = i;
            /*printf("%d-", k);
            for(int i = 1; i <= n; i++)
				printf("%d ", a[i]);
			puts("");
            */
			int flag = 1;
			for(int j = 1; j < k; j++)
				if(a[k] == a[j] || a[k]+k == a[j]+j || a[k]-k+n == a[j]-j+n ) {flag = 0; break;}
			if(flag) dfs(k+1);
            a[k] = 0;
		}
	}
}

int main(){
	scanf("%d", &n);
	dfs(1);
	printf("%d", ans);
	return 0;
}
2021/5/25 16:54
加载中...