八皇后问题
#include<iostream> #include<cmath> using namespace std; int col[10],sum=0; //为了直观,行与列下标都从1开始,范围1-8,col[]数组中存的是每一行皇后位置的列值 void queen(int i){ //i表示当前行 int r,j; //r代表i之前的行,j表示当前列 if(i>8){ //产生一组解 for(int t=1;t<=8;t++){ cout<<col[t]; } cout<<endl; sum++; return; } for(j=1;j<=8;j++){ for(r=1;r<i;r++){ if( col[r]==j||abs(col[r]-j)==abs(r-i) ){ break; } } if(r==i){ col[i]=j; queen(i+1); } } } int main(){ queen(1);//初始先在第一行进行放置皇后 cout<<"共有"<<sum<<"组解"<<endl; //输出八皇后问题有多少组解,应为92 return 0; }

浙公网安备 33010602011771号