Bootstrap

算法设计——n皇后问题

回溯算法:

void backtrack(int t){
	int i;
	if(t>n){
		sum++;
		for(i=1;i<=n;i++){
			cout<<x[i]<<" ";
		}
		cout<<endl;
		
	}
	else for(i=1;i<=n;i++){
		x[t]=i;
		if(place(t)) backtrack(t+1);
		
	}
	
} 

判断是否有冲突

abs(t-i)==abs(x[i]-x[t])不在同一条斜线

x[i]==x[t]不在同一行

bool place(int t){
	int i;
	for(i=1;i<t;i++)
	{
		if(abs(t-i)==abs(x[i]-x[t])||x[i]==x[t]) return false;
	}
	return true;
} 

主函数

int main(){
	cout<<"请输入皇后的个数:"<<endl;
	cin>>n;
	backtrack(1);
	
	cout<<"总共有"<<sum<<"种";
} 

;