最后1个点TLE,请问该思路是否还有优化的余地
查看原帖
最后1个点TLE,请问该思路是否还有优化的余地
490435
PaCoCo楼主2023/6/9 22:18
#include<iostream>

using namespace std;

int n;
int ans[15];
int board[15][15];
int cnt = 0;

void print(){
	// for(int j = 1; j<=n; j++){
	// 	for(int i = 1; i<=n; i++){
	// 		cout<<board[j][i]<<' ';
	// 	}cout<<endl;
	// }
	for(int i = 1; i<=n; i++){
		cout<<ans[i]<<' ';
	}cout<<endl;
	// cout<<"_________________"<<endl;
}

void draw(int d, int l, int color){
	for(int i = 1; i<=n; i++){
		board[i][l] += color;
	}
	int b = d+l;
	for(int i = 1; i<=n; i++){
		if(-i+b<=0 || -i+b>n) continue;
		board[i][-i+b] += color;
	}
	b = l-d;
	for(int i = 1; i<=n; i++){
		if(i+b<=0 || i+b>n) continue;
		board[i][i+b] += color;
	}
}

void dfs(int d){
	if(d>n){
		if(cnt++<3)
			print();
		return;
	}

	for(int i = 1; i<=n; i++){
		if(board[d][i]==0){
			draw(d,i,-1);
			ans[d] = i;

			dfs(d+1);
			
			draw(d,i,1);
			ans[d] = 0;
		}
	}
}

int main(){
	cin>>n;
	dfs(1);
	cout<<cnt;

	return 0;
}
2023/6/9 22:18
加载中...