蒟蒻求助!大老板看看为啥会重复搜索n次?最后三点tle!
查看原帖
蒟蒻求助!大老板看看为啥会重复搜索n次?最后三点tle!
209758
AdGats楼主2020/7/20 23:48

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,sum;
bool ma[15][15];
void print(){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)	if(ma[i][j])	cout<<j<<' ';
	cout<<endl;
}
bool real(int x,int y){
	//if(use[x][y])	return 0;
	for(int i=1;i<x;i++)	if(ma[i][y])	return 0;
	for(int i=1;i<x;i++)
		for(int j=1;j<=n;j++){
			if(ma[i][j]&&i+y==j+x)	return 0;
			if(ma[i][j]&&x-i==j-y)	return 0;
		}
	return 1;	
}
void dfs(int num){
	if(num>n){ 
		sum++;
		if(sum<=3)
			print();
		return ;
	}
	for(int i=1;i<=n;i++)
		if(real(num,i)){
			ma[num][i]=1;
			dfs(num+1);
			ma[num][i]=0;
		}
}
int main(){
	cin>>n;
	dfs(0);
	cout<<sum;
	return 0;
}

2020/7/20 23:48
加载中...