N皇后问题

来源:互联网 发布:2017网络事件 编辑:程序博客网 时间:2024/06/05 21:23

输入一个正整数N,则程序输出N皇后的全部摆法。输出的每一行都代表一种摆法。

行里的第i个数字如果是n,就代表第i行的皇后应该放在第n列。

皇后的行、列编号都是从1开始算。

样例输入:

4

样例输出:

2 4 1 3

3 1 4 2

解析:先看前0~k-1行是否摆好  再考虑第k行

#include<iostream>#include<cmath>using namespace std;int N;int queenPos[100];//第i行摆的皇后的列号 void NQueen(int k);int main(){cin>>N;NQueen(0);return 0;}void NQueen(int k){int i;if(k==N){for(i=0;i<N;i++)cout<<queenPos[i]+1<<" ";cout<<endl;return;}for(i=0;i<N;i++)//列 {int j;for(j=0;j<k;j++)//行 {if(queenPos[j]==i||abs(queenPos[j]-i)==abs(k-j))//比较是否相邻  列号相等或行的差和列的差相等都为相邻 break;}if(j==k){queenPos[k]=i;NQueen(k+1);}}}


1 0