八皇后问题求解的实现算法

来源:百度知道 编辑:UC知道 时间:2024/06/19 20:28:13
在一个8*8的棋盘上放置8个皇后,不允许任何两个皇后在棋盘的同一行、同一列和同一对角线上,即在每一行、每一列只能有一个皇后。
要求:八皇后问题是一个古老的搜索问题,可以用递归算法来实现,在递归过程中,一一测试每一种放法,直到得出全部正确答案为止。
〔实现提示〕定义一个8*8的二维数组(为方便处理,下标范围为1:8为好);
对数组进行初始化;(全置空)
从n行开始放置第一个皇后(满足一行只有一个皇后的要求)后对1~8列进行测试;若满足条件则保存皇后所在位置,直到所有皇后放置好;输出每一个皇后应放置的位置
任务:
A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。

#include <stdio.h>
#include <math.h>

#define N 8

void Check(int p[]){
int i,j;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(abs(p[j]-p[i])==j-i)
return;
for(i=0;i<N;i++)
printf("%d ",p[i]);
printf("\n");
}

void Permute(int n,int p[]){
int i,j;
if(n==1)
Check(p);
for(i=0,j=n-1;i<N;i++)
if(!p[i]){
p[i]=j; Permute(j,p); p[i]=0;
}
}

int main(){
static int p[N];
int n=N;
Permute(n+1,p);
return 0;
}

#include <stdio.h>
#include <memory.h>
int sum,lie[8],xie[15],xie1[15];
void q(int n)
{
for(int i=0;i<8;i++)
{
if(lie[i]!=1&&xie[n+i]!=1&&xie1[i-n+7]!=1)
{
lie[i]=xie[n+i]=xie1[i-n+7]=1;
if