八皇后问题的数据结构课程设计
最近几个星期要搞数据结构的课程设计,其中就有一个八皇后问题,哪位知道具体的程序,希望不是计算机等级考试中用的那种,赶紧发过来,不胜感激!!!...
最近几个星期要搞数据结构的课程设计,其中就有一个八皇后问题,哪位知道具体的程序,希望不是计算机等级考试中用的那种,赶紧发过来,不胜感激!!!
展开
1个回答
展开全部
#include<stdio.h>
int m=0,n; //m为摆法计数,n为皇后个数
int *a;
int fit(int i, int j) //检查(i,j)上能否放棋子
{
int j1=j, i1=i, ok1=1; //检查第i行上能否放棋子
while( (j1>1)&&ok1)
{
j1--;
ok1=a[j1]!=i ;
}
j1=j; i1=i; //检查对角线上能否放棋子
while( (j1>1)&&(i1>1)&&ok1)
{
j1--;
i1--;
ok1=a[j1]!=i1 ;
}
j1=j; i1=i; //检查另一对角线上能否放棋子
while( (j1>1)&&(i1<n)&&ok1)
{
j1--;
i1++;
ok1=a[j1]!=i1 ;
}
return ok1;
}
void queen(int j) //从第j列开始逐个试探
{
if (j>n)
{
m++;
printf("放法%d ",m);
for (int i=1;i<=n;i++)
printf(" (%d,%d)",a[i],i);
printf("\n");
}
else for( int i=1; i<=n;i++)
if(fit(i,j)) //检查(i,j)上能否放棋子
{
a[j]=i; //在(i,j)上放一个棋子
queen(j+1) ;
}
}
void main()
{
printf("请输入皇后棋子的个数n:\n");
scanf("%d",&n); //n为皇后个数
a = new int[n];
queen(1);
}
int m=0,n; //m为摆法计数,n为皇后个数
int *a;
int fit(int i, int j) //检查(i,j)上能否放棋子
{
int j1=j, i1=i, ok1=1; //检查第i行上能否放棋子
while( (j1>1)&&ok1)
{
j1--;
ok1=a[j1]!=i ;
}
j1=j; i1=i; //检查对角线上能否放棋子
while( (j1>1)&&(i1>1)&&ok1)
{
j1--;
i1--;
ok1=a[j1]!=i1 ;
}
j1=j; i1=i; //检查另一对角线上能否放棋子
while( (j1>1)&&(i1<n)&&ok1)
{
j1--;
i1++;
ok1=a[j1]!=i1 ;
}
return ok1;
}
void queen(int j) //从第j列开始逐个试探
{
if (j>n)
{
m++;
printf("放法%d ",m);
for (int i=1;i<=n;i++)
printf(" (%d,%d)",a[i],i);
printf("\n");
}
else for( int i=1; i<=n;i++)
if(fit(i,j)) //检查(i,j)上能否放棋子
{
a[j]=i; //在(i,j)上放一个棋子
queen(j+1) ;
}
}
void main()
{
printf("请输入皇后棋子的个数n:\n");
scanf("%d",&n); //n为皇后个数
a = new int[n];
queen(1);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询