C语言。8皇后程序,算出来只有88种...还差4种..帮忙下先谢谢了!

来源:百度知道 编辑:UC知道 时间:2024/06/01 19:59:35
#include <stdio.h>
int x=0; //当前行数
int queen[8]; //数组
int num=0; //成功次数
int k;
int check(int k)
{
int i;
for(i = 0; i < k; i++)
if (queen[i]==queen[k]||queen[i] - i == queen[k] - k||queen[i] + i == queen[k] + k)
return 0;
return 1;
}

int main()
{
int c;
c=0;
for(;c!=7;c++)queen[c]=0;
do
{
k=check(x);
if(x==7&&k==1) //当第一行列数==7(数组下标从0-7)且本次可以放子,则:
{
num++; //成功次数+1
queen[x]=0; //当前列清0
while(queen[x-1]==7)
{
queen[--x]=0;
}
queen[--x]++;
//退回上一行(x--),上一行列数+1
}
else if(k==1) //当行数不足7,但本行可以放子(k==1)
x++; //转向下一行(x++)
else if(queen[x]!=7) //当当前行未尝试到第七列
queen[x]++; //转向下一列(queen[x]++;)
else //当前行已至第七列
{
queen[x]=0; //本列清零
while(queen[x-1]==7)
{
queen[

你的代码我就不看了,给你两个八皇后的代码,一个堆栈回溯法,一个函数递归法,本质上其实是一种方法,好好体会吧(=^ ^=)
函数递归法:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void f(int *qp,int x,int y);
int test(int *qp,int x,int y);
int main(void)
{
int a[8],x=0,y=0;
f(a,x,y);
getch();
return EXIT_SUCCESS;
}
void f(int *a,int x,int y)
{
static int i=0;
int k=0;
if(test(a,x,y))
{
a[y]=x;
if(y==7)
{
printf("[%d] ",++i);
while(k<=7)
{
printf("%d ",a[k]+1);
k++;
}
printf("\n");
return;
}
else
{
f(a,0,y+1);
if(x+1<8)
f(a,x+1,y);
else
return;
}

}
else
{
if(x+1<8)
f(a,x+1,y);
else
return;
}
}
int test(int *a,int x,int y)
{
int i;
for(i