1.代码:
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#include<stdbool.h>
#include<stdlib.h>
/**
*Place it there,applicable
*/
bool place(int* paraSolution,int paraT){
int j;
for(j=1;j<paraT;j++){
if((abs(paraT-j)==abs(paraSolution[j]-paraSolution[paraT]))||(paraSolution[j]==paraSolution[paraT]))
{//同一直线或者同一行
return false;
}
}
return true;
}
/**
*Backtracking.
*/
//回溯算法。
void backtracking(int *paraSolution,int paraN,int paraT){
int i;
if(paraT>paraN){
for(i=1;i<=paraN;i++)
printf("%d ",paraSolution[i]);
//打印.
printf("\r\n");
}
else{
for(i=1;i<=paraN;i++){
paraSolution[paraT]=i;
if(place(paraSolution,paraT))
backtracking(paraSolution,paraN,paraT+1);
}
}
}
//paraT第几个皇后。
/**
*Title: n queens.<br>
*/
void nQueen(int paraN){
int i;
int *solution=(int *)malloc((paraN+1)*sizeof(int));
for(i=0;i<=paraN;i++)
solution[i]=0;
backtracking(solution,paraN,1);
}
/**
*The entrance.
*/
int main()
{
nQueen(5);
return 1;
}
2.运行结果:
1 3 5 2 4
1 4 2 5 3
2 4 1 3 5
2 5 3 1 4
3 1 4 2 5
3 5 2 4 1
4 1 3 5 2
4 2 5 3 1
5 2 4 1 3
5 3 1 4 2