8皇后是一个经典问题,大意就是8*8的棋盘上放8个皇后棋子,其中这八个棋子不同行不同列不同斜线。看了很多解题的方法,这里先记录一种。
分析见代码:
#include <iostream>using namespace std;int sum;//打印函数void PRint(int result[]){ for(int i = 0;i < 8;i++) { for(int j = 0;j < result[i];j++) cout<<"* "; cout<<"# "; for(int j = result[i] + 1;j < 8;j++) cout<<"* "; cout<<endl; } cout<<"----------------"<<endl; sum++;}//检查第x行第result[x]列是否可以bool check(int result[],int x){ for(int i = 0;i < x;i++) { //不同行不同列不同斜线 if(result[i] == result[x] || abs(result[i] - result[x]) == (x - i)) return false; } return true;}//递归求所有解void queen(int result[],int x){ if(x == 8) { print(result); return ; } for(int i = 0;i < 8;i++) { result[x] = i; if(check(result,x)) { //递归求解 queen(result,x + 1); } }}int main(){ int result[8] = {0}; queen(result,0); cout<<sum; return 0;}
新闻热点
疑难解答