八皇后问题

#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;
}

 

posted @ 2020-07-28 17:50  执着于风  Views(101)  Comments(0)    收藏  举报