高手帮我看看8皇后

来源:百度知道 编辑:UC知道 时间:2024/05/13 00:33:49
#include<stdio.h>
int x[9],a[9];
int b[20],c[20];
void main()
{
int i,j,m,n;
for(i=1;i<=8;i++)
a[i]=b[i]=c[i]=1;
for(;i<=16;i++)
b[i]=c[i]=1;
printf("输入初始位置(1到8的两个整数):");
scanf("%d%d",&m,&n);
a[m]=b[m+n]=c[8+n-m]=0;
x[m]=n;
for(i=m-1;i>0;i--)
{ for(j=1;j<=8;j++)
{ if(j!=n)
if(a[i]&&b[i+j]&&c[8+j-i])
x[i]=j; }
a[i]=b[i+j]=c[8+j-i]=0; }
for(i=m+1;i<=8;i++)
{
for(j=1;j<=8;j++)
{if(j!=n)
if(a[i]&&b[i+j]&&c[8+j-i])
x[i]=j; }
a[i]=b[i+j]=c[8+j-i]=0;}
for(i=1;i<=8;i++)
printf("(%d,%d)",i,x[i]);
printf("\n");
}
对于输入任意一个位置!!输出一种方案即可!!!呵呵!1

用递归做!

#include <stdio.h>
#include <math.h>
#include<stdlib.h>
void search(int);
void printresult(); //打印结果
int canplace(int,int); //判断该位置能否放置皇后
void place(int,int); //在该位置能否放置皇后
void takeout(int,int); //把该位置放置皇后去掉
int a[8]; //a[i]存放第i个皇后的位置
int main()
{
search(0); //递归搜索
}
void search(int m)
{
int i;
if(m>=8) //当已经找出一组解时
printresult(); //输出当前结果
else
{
for(i=0;i<8;i++) //对当前行0到7列的每一个位置
{
if(canplace(m,i)) //判断第m个格子是否能放堡垒
{
place(m,i); //在(m,i)格子上放置一个皇后
search(m+1); //递归搜索下一行
takeout(m,i); //把(m,i)格子上的皇后去掉
}
}
}
}
int canplace(int row, int col)
{
int i;
for(i=0;i<row;i++)
if(fabs(i-row)==fabs(a[i]-col)||a[i]==col)
return(0);
return(1);
}