问题:n皇后问题:输入整数n,要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案。输出结果里的每一行都代表一种摆法。行里的第i个数字如果是n,就代表第i行的皇后应该摆放在第n列。皇后的行、列编号都是从1开始算。
样例输入:
4
样例输出:
2 4 1 3
3 1 4 2
代码:
#include "stdafx.h" #include <iostream> #include <algorithm> #include <cmath> using namespace std; int N; int queenPos[100]; //在0到k-1行皇后已经摆好的情况下,摆第k行及其后面的皇后 void NQueen(int 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++) { int j; for(j = 0;j<k;j++) { //和已经摆好的k个皇后的位置比较,看是否冲突 if(queenPos[j]==i || abs(queenPos[j]-i)==abs(k-j)) { break; } } if(j==k) { queenPos[k] = i;//将第k个皇后摆放在位置i NQueen(k+1); } } } int _tmain(int argc, _TCHAR* argv[]) { cin>>N; NQueen(0); return 0; }