queen8系列

时间:2024-11-05 11:15:52编辑:阿奇

数据结构八皇后问题

{输入棋盘大小值n;m=0; //从空配置开始notcatch=1; //空配置中皇后不能相互捕捉do{if(notcatch){if(m==n){输出解;调整(形成下一个候选解else扩展当前候选解至下一列; //向前试探else调整(形成下一个候选解); //向后回溯notcatch = 检查当前候选解的合理性*/#include "stdlib.h"#define MAXN 100//全局变量及全局工作数组定义int m,n,NotCatch;int ColFlag[MAXN+1]; /*表示第i列的第ColFlag[i]行有皇后,(1:有;0:没有)*/int RowFlag[MAXN+1]; /*RowFlag[i]:表示第i行没有皇后(1:没有;0:有)*/int upBiasFlag[2*MAXN+1]; /*upBiasFlag[i]:表示第i条上斜线(右高左斜)没有皇后(1:没有;0:有)*/int dnBiasFlag[2*MAXN+1]; /*dnBiasFlag[i]:表示第i条下斜线(左高右斜)没有皇后(1:没有;0:有)*///显示输入填写的数字void ArrangeQueen(){int i;char answer;printf("输入棋盘边格数:");scanf("%d",&n);for(i=0;i求采纳为满意回答。


数据结构之八皇后

#include
#include
#include
#include
int printed;
void draw(int* a,int k)
{
int i,j;
for(i=0;i<k;i++)
{
printf("\t");
for(j=0;j<k;j++)
if(a[i]-1==j) printf("Q "); else printf("- ");
printf("\n");
}
printf("\n");

}
void Settle(int *a,int iStep,int k)
{
int i,j,l,flag=1;
for(i=0;i<iStep-1;i++)
if(a[iStep-1]==a[i]) return;
if(iStep==k)
{
for(j=0;j<k;j++)
for(l=0;l<k&&l!=j;l++)
if(fabs(j-l)==fabs(a[j]-a[l])) flag=0;
if(flag)
{
for(i=0;i<k;i++)
printf("(%d,%d) ",i+1,a[i]);
printf("\n");
draw(a,k);
printed++;
}
flag=1;
}
for(i=1;i<=k;i++)
{
a[iStep]=i;
Settle(a,iStep+1,k);
}
}
void main()
{
int* a;
int k;
printf("Enter the size of the square:");
scanf("%d",&k);
a=(int*)calloc(k,sizeof(int));
system("cls");
Settle(a,0,k);
if(! printed) printf("No answers accepted!\n");
else printf("%d states available!\n",printed);
}

这是用C语言实现的,主要是递归全排列,具体不会的再问我吧^^


上一篇:电视剧新碧血剑

下一篇:没有了