N皇后问题是典型的递归问题,现在先把题目要求描述一下:
样例输出:
2 4 1 3
3 1 4 2
展示一种解法:
#include<iostream>
#include<cmath>
using namespace std;
int N;
int queenPos[100];
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);
}
}
}
int main()
{
cin >> N;
NQueen(0);
return 0;
}
汉诺塔问题也是典型的递归算法解决的问题,点击下面链接直接可以练习:
http://acm.nyist.edu.cn/JudgeOnline/keysearch.php?key=%E6%B1%89%E8%AF%BA%E5%A1%94