/* 问题描述:输入一个正整数N,则程序输出N皇后问题的全部摆法。 输出结果里的每一行都代表一种摆法。行里的第i个数字 如果是n,就代表第i行的皇后应该放在第n列。皇后的行、列编号都是从1 开始计算 */#include <iostream>#include <cmath>using namespace std;int N;int queenPos[100];//用来存放算好的皇后位置,最左上角是(0,0);void NQueen(int k)//求解函数{//在0~k-1行已经摆好的情况下,摆第k行及其以后的皇后 int i; if( k==N) {//N个皇后已经摆好 for( i=0 ;i<N;i++) cout<< queenPos[i] + 1<< " "; cout <<endl; return ; } for(i=0 ; i<N ; i++) {//逐个尝试第k个皇后的位置 int j; for(j = 0 ;j< k; j++) {//和已经摆好的k个皇后比较,看是否冲突 if(queenPos[j] == i||abs(queenPos[j] - i) == abs(k-j)) {//发生冲突,测试下一个位置 break; } } if(j == k) {//当前位置i和摆好的皇后不冲突 queenPos[k] = i;//将第k行的皇后摆在第i列并记录下来 NQueen(k+1);//递归,继续摆放第k+1行 } }}int main(){ cin>>N; NQueen(0);//从第零航开始摆皇后 return 0;}运行结果:
新闻热点
疑难解答