求教八皇后问题,枚举算法
我知道回溯法很简单,但是看不懂啊,结果看到了枚举法,俺的娘,还是看不懂,大家帮忙分析下,谢谢,枚举法应该是用总的办法减去受条件拘束的办法,可是还是没思路程序代码:
#include <iostream> using namespace std; bool check_1(int a[],int n) { for(int i=2;i<=n;i++)//bool是怎么判断的 { for(int j=1;j<=i-1;j++) { if ((a[i]==a[j])||(abs(a[i]-a[j])==i-j)) { return false; } } } return true; } void queens_1() { int a[9]; int count = 0; for(a[1]=1;a[1]<=8;a[1]++)//这一大串for是用来干嘛的,可不可以算出执行一次后的结果 { for(a[2]=1;a[2]<=8;a[2]++) { for(a[3]=1;a[3]<=8;a[3]++) { for(a[4]=1;a[4]<=8;a[4]++) { for(a[5]=1;a[5]<=8;a[5]++) { for(a[6]=1;a[6]<=8;a[6]++) { for(a[7]=1;a[7]<=8;a[7]++) { for(a[8]=1;a[8]<=8;a[8]++) { if(!check_1(a,8)) continue; else { for(int i=1;i<=8;i++) //这里是什么意思 { cout<<a[i]; } cout<<endl; count++; } } } } } } } } } cout<<count<<endl; } void main() { queens_1(); }