主题:N皇后问题
这个是很经典的递归问题了,我希望是输出所有的答案,请高手帮我指点下以下代码的错误以及如何改进,不甚感激~~!
#include<stdio.h>
#include<stdlib.h>
#define N 20
int cont=0,q[N];
void print(int n)
{
cont++;
int i;
printf("the %d solution:",cont);
for(i=1;i<=n;i++)
printf("%2d",q[i]);
printf("\n");
}
int find(int i,int k)
{
int j=1;
while(j<k)
{
if((q[j]==i)||(abs(q[i]-i)==abs(j-k)))
return 0;
j++;
}
return 1;
}
void place(int k,int n)
{
int i;
if(k>n)
print(n);
else
for(i=1;i<=n;i++)
if(find(i,k))
{
q[k]=i;
place(k+1,n);
}
}
void main()
{
int n;
printf("queen question n=:");
scanf("%d",&n);
if(n>20)
printf("n is too large");
else
{
printf("the solution is :\n");
place(1,n);
printf("\n");
}
}
/*编写一个程序,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行 不同列 不同左右对角线
以上代码有问题*/
#include<stdio.h>
#include<stdlib.h>
#define N 20
int cont=0,q[N];
void print(int n)
{
cont++;
int i;
printf("the %d solution:",cont);
for(i=1;i<=n;i++)
printf("%2d",q[i]);
printf("\n");
}
int find(int i,int k)
{
int j=1;
while(j<k)
{
if((q[j]==i)||(abs(q[i]-i)==abs(j-k)))
return 0;
j++;
}
return 1;
}
void place(int k,int n)
{
int i;
if(k>n)
print(n);
else
for(i=1;i<=n;i++)
if(find(i,k))
{
q[k]=i;
place(k+1,n);
}
}
void main()
{
int n;
printf("queen question n=:");
scanf("%d",&n);
if(n>20)
printf("n is too large");
else
{
printf("the solution is :\n");
place(1,n);
printf("\n");
}
}
/*编写一个程序,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行 不同列 不同左右对角线
以上代码有问题*/