自己编的八皇后问题仅供参考
程序代码:#include <stdio.h>
#define MAX 8
#define NUM 100000
int arr[MAX][MAX];
int result[NUM][MAX];
int tmp[MAX];
int res;
void init()
{
int i,j;
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++) arr[i][j]=0;
tmp[i]=-1;
}
res=0;
}
void Attack(int x,int y,int inc)
{
int i,j;
for(i=0;i<MAX;i++) arr[i][y]+=inc;
for(i=0;i<MAX;i++) arr[x][i]+=inc;
for(i=x,j=y;i<MAX&&j<MAX;i++,j++) arr[i][j]+=inc;
for(i=x,j=y;i>=0&&j>=0;i--,j--) arr[i][j]+=inc;
for(i=x,j=y;i<MAX&&j>=0;i++,j--) arr[i][j]+=inc;
for(i=x,j=y;i>=0&&j<MAX;i--,j++) arr[i][j]+=inc;
arr[x][y]-=5*inc;
}
void Queen(int layer)
{
int i;
if(layer==MAX)
{
for(i=0;i<MAX;i++)
{
result[res][i]=tmp[i];
}
res++;
return;
}
for(i=0;i<MAX;i++)
{
if(arr[layer][i]) continue;
Attack(layer,i,1);
tmp[layer]=i;
Queen(layer+1);
Attack(layer,i,-1);
tmp[layer]=-1;
}
}
int main()
{
int i,j;
init();
Queen(0);
for(i=0;i<res;i++)
{
for(j=0;j<MAX;j++) printf("%d ",result[i][j]);
printf("\n");
}
printf("%d\n",res);
return 0;
}[ 本帖最后由 C_戴忠意 于 2012-4-16 21:06 编辑 ]









