要求输出使n元棋盘上的n个皇后互不攻击的所有布局。

来源:百度知道 编辑:UC知道 时间:2024/05/23 20:23:11
由n^2个方块排成n行n列的正方形称为“n元棋盘”。如果两个皇后位于n元棋盘的同一行或同一列或同一对角线上,则成为它们互相攻击。
具体要求如下:
(1)n可由键盘输入。
(2)在输入n后,动态建立方法说明中所需要建立的数组空间;程序运行结束是释放该存储空间。
(3)分别用n=4,5,6运行你的程序
最好是c语言描述~

已经编译运行确认:

#include<stdio.h>
#include<conio.h>

#include<stdlib.h>
int q[20];
int count=0;
void print(int n)
{
int i;
count++;
for(i=1;i<=n;i++)
{printf("(%d,%d)",i,q[i]);
}
printf("\n");
}

int Place(int i,int k)
{
int j;
j=1;
while(j<k)
{if((q[j]==i) || abs(q[j]-i)==abs(j-k)) return 0;
j++;
}
return 1;
}

void Queens(int k,int n)
{
int i;
if(k>n)
print(n);
else
{for(i=1;i<=n;i++)
if(Place(i,k)==1)
{q[k]=i;
Queens(k+1,n);
}
}
}

int main()
{
int n;
printf("Please input n: ");
scanf("%d",&n);
Queens(1,n);
getch();
return 0;
}