#include <iostream> #include <stdlib.h> using namespace std; int column[100]; int queenNum=0; int count =0; int isAble(int row,int col){ for(int i=0;i<row;i++){ if(column[i]==col||abs(col-column[i]) == abs(i-row)){ return 0; } } return 1; } void findQueen(int rowNum){ if(rowNum==queenNum){ count++; return; } for(int i=0;i<queenNum;i++){//一行中,逐列去检索 if(isAble(rowNum,i)){//检验该位置是否可以安放 column[rowNum] = i;//记录列号 findQueen(rowNum+1);//下一行对下一个皇后进行安 } } } int main(){ cin>>queenNum; findQueen(0); cout<<"种数:"<<count<<endl; }每行代码什么意思
时间: 2023-12-05 14:04:03 浏览: 72
使用include <iostream>时一定要加using namespace std
这是一个求解 N 皇后问题的程序,可以计算 N 皇后问题的解法数量。N 皇后问题是指在 N * N 的棋盘上放置 N 个皇后,使得它们互相之间不能攻击(即不能在同一行、同一列或同一对角线上)。
程序中,变量 queenNum 表示皇后的数量,column 数组表示每一行中皇后所在的列号,count 表示解法的数量。isAble 函数用于判断当前位置是否可以放置皇后。findQueen 函数用于递归地放置皇后,从第 0 行开始,逐行检查每一列,如果当前位置可以放置皇后,则记录该列号,继续递归地放置下一个皇后。当递归到最后一行时,表示找到了一种解法,对 count 进行累加。主函数中读入皇后数量,调用 findQueen 函数求解。
阅读全文