有关N皇后问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 05:27:10
#include <stdio.h>
#include <math.h>
#include <conio.h>
int n=4;
int a[100];

int panduan(int k)
{
int i=1;
while((i<k)&&(a[i]!=a[k])&&(fabs((a[i]-a[k])/(i-k))!=1))
i++;
if(i==k)return 1;
else return 0;
}

int zx(int k)
{int i,f;
if(k>n)
{printf("\n");
for(i=1;i<n+1;i++)

printf("%d ",a[i]);

printf("\n");
getch();
}

else
{for(i=1;i<n+1;i++)
{
a[k]=i;
//printf("%d %d ",k,a[k]);getch();

if(panduan(k)==1)
zx(k+1);}
}
}

main()
{
zx(1);
scanf("%*d");
}

该程序执行正常
但是将n=8后,则没有输出
将数组改为【10000】后也无输出
请高手明示原因
谢谢1楼的亲
但这不是我想要的解释啊!
我的程序哪里出问题了
请高人明示,有必要的

这是我写的,可以看看,呵呵

#define N 4

#include <stdio.h>
#include <conio.h>
void main()
{
void set(int array[][N]);
void show(int array[][N]);
void findpos(int deep,int array[][N]);
void makepos(int y,int x,int array[][N]);
void unmakepos(int y,int x,int array[][N]);

int queen[N][N];

set(queen);
findpos(N-1,queen);

}

void set(int array[][N])
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
array[i][j]=0;
}

void show(int array[][N])
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(array[i][j]==N+1)
printf("%c ",1);
else
printf(". ");
}
printf("\n");
}
printf("\n\n\n");
}
void makepos(int y,int x,int array[][N])
{
int i,j;
if(x>