87分,最后一个点超时了,大佬求教
查看原帖
87分,最后一个点超时了,大佬求教
1379724
liuchenjia12345楼主2025/1/14 22:58

代码如下:

#include<bits/stdc++.h>
using namespace std;
int a[1005][1005],n,cnt;
bool f(int x1,int y1){
	for(int i=1;i<=n;i++){
		if(a[x1][i]==1||a[i][y1]==1){
			return 0;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if((i-j==x1-y1&&a[i][j]==1)||(i+j==x1+y1&&a[i][j]==1)){
				return 0;
			}
		}
	}
	return 1;
}
void dfs(int x){
	if(x>n){
		cnt++;
		if(cnt<=3){
			for(int i=1;i<=n;i++){
				for(int j=1;j<=n;j++){
				if(a[i][j])
					cout<<j<<" ";
				}
				
			}cout<<endl;
		}
		return;
	}
	for(int i=1;i<=n;i++){
		if(f(x,i)){
			a[x][i]=1;
			dfs(x+1);
			a[x][i]=0;
		}
	}
}
int main(){
	cin>>n;
	dfs(1);
	cout<<cnt;
	return 0;
}    
2025/1/14 22:58
加载中...