这个是很经典的递归问题了,我希望是输出所有的答案,请高手帮我指点下以下代码的错误以及如何改进,不甚感激~~!
#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个皇后,要求每个皇后不同行 不同列 不同左右对角线
  以上代码有问题*/