C++ 八皇后 递归算法实现

来源:互联网 发布:小米windows平板3 编辑:程序博客网 时间:2024/06/06 03:42

八皇后问题感觉是递归算法中比较简单的一种,核心思想就是放置之前检查行列四个斜方位即可,共92种方案,还是挺有趣的,和汉诺塔一样,应该属于递归比较经典的问题


#include<iostream>using namespace std;int g_count=0;bool CanPlace(int row,int col,int (*chess)[8]){for(int i=0;i<8;i++){if(chess[i][col]==1){//check colreturn false;}if(chess[row][i]==1){//check rowreturn false;}}for(int i=0;i<8;i++){//check left-frontif(row-i<0||col-i<0){break;}if(chess[row-i][col-i]==1){return false;}}for(int i=0;i<8;i++){//check right-frontif(row-i<0||col+i>7){break;}if(chess[row-i][col+i]==1){return false;}}for(int i=0;i<8;i++){//check left-belowif(row+i>7||col-i<0){break;}if(chess[row+i][col-i]==1){return false;}}for(int i=0;i<8;i++){//check right-belowif(row+i>7||col+i>7){break;}if(chess[row+i][col+i]==1){return false;}}return true;}void EightQueen(int row,int col,int (*chess)[8]){//temp 2Darrayint chess2[8][8];//put last scene to temp 2Darrayfor(int i=0;i<8;i++){for(int j=0;j<8;j++){chess2[i][j]=chess[i][j];}}if(row==8){//show resultfor(int i=0;i<8;i++){for(int j=0;j<8;j++){cout<<chess2[i][j]<<' ';}cout<<endl; }cout<<endl;g_count++;}else{for(int j=0;j<8;j++){if(CanPlace(row,j,chess2)){chess2[row][j]=1;//put chessEightQueen(row+1,j,chess2);//move to next rowchess2[row][j]=0;//remove chess to use for next by same chess 2Darray}} }};int main(){int chess[8][8]={0};EightQueen(0,0,chess);cout<<g_count<<endl;return 0;}


1 0
原创粉丝点击