回复 4# geoffrey87 的帖子
#include<stdio.h>
#include<math.h>
#define N 4/*大小,也就是皇后的多少个N*/
void Check(int p[]) /*函数check用来检测序列p是否满足(2)*/
{
int i,j;
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if(abs(p[j]-p[i])==j-i)
return;/*不满足则返回到函数permute继续找下一个p*/
//printf("\n");
/*测试
for(i=0;i<N;i++)
for(j=0;j<N;j++) 满足(3)的序列打印结构
printf("%d",p[i]+j);*/
for(i=0;i<N;i++)
printf("%d",p[i]);/*满足(2)的序列打印结果*/
printf("\n");
}
/*函数permute用递归法来找出满足(1)的序列p*/
/*n表示当前已找到第几行(设从第N行向上找),用P〔〕来保存序列*/
void Permute(int n,int p[])
{
int i,j;
if(n==1)
Check(p);
/*找出下一行可放皇后的列(已放过的列i所对应的p〔i〕!=0)*/
for(i=0,j=n-1;i<N;i++)
if(!p[i])
{
p[i]=j;
Permute(j,p);
p[i]=0;
}
}
void main()
{
int p[N]={0},n=N;/*定义数组P[N]用来存放结果序列,n为行号*/
printf("There is all result,one method in line\n");
Permute(n+1,p);/*调用permute函数进行搜索*/
}