- C语言代码示例:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int N;
int queenPos[100];
//用来存放算好的皇后位置。最左上角是(0,0)
void NQueen(int k)//在0~k-1行皇后已经摆好的情况下,摆第k行及其后的皇后
{
int i, j;
if( k == N )
{ //N个皇后已经摆好
for( i = 0; i < N; i++)
printf("%d ", queenPos[i]+1);
printf("\n");
return ;
}
for( i=0; i<N; i++)
{//逐个尝试第k个皇后的位置
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);
}
}
}
int main()
{
printf("请输入N:");
scanf("%d", &N);
NQueen(0);
return 0;
}
- 运行示例:
注:文中问题及代码参考 MOOC——《程序设计与算法》(北京大学 郭炜)