数据结构c八皇后代码输出有问题
#include <stdio.h>#include <stdlib.h>
#define MaxSize 100
typedef struct
{ int c; //c存放第i个皇后的列号
int top; //栈顶指针
} StackType; //声明顺序栈类型
StackType St; //定义栈st
void dispasolution() //输出一个解
{static int count=0;
printf("第%d个解:",++count);
for(int i=1;i<=St.top;i++)
printf("(%2d,%2d)",i,St.c);
printf("\n");
}
bool place(int k) //测试(k,j)是否与1~k-1的皇后有冲突
{ if (k==1) return true;
for(int i=1;i<k;i++) //放第一个皇后时没有冲突
if(St.c==St.c||(St.c-St.c)==(k-i)||(St.c-St.c)==(i-k))
return false;
return true; //没有冲突时返回真
}
void queen(int n) //求解n皇后问题
{ St.top=0; //初始化栈顶指针,为了让皇后从第1行开始,不用下标0
St.c[++St.top]=0; //进栈。c=0,表示从第1个皇后开始,初始列号为0,因为后面要++
while (St.top>0) //栈不空时循环
{
for(++St.c;St.c<=n;St.c++)
if(place(St.top)) break;
if(place(St.top))
{
if(St.top==n)
{
dispasolution();
--St.top;
}
else{St.top++;}
}
else{--St.top;}
}
}
int main()
{ int n; //n存放实际皇后个数
printf("皇后问题(n<20) n=");
scanf("%d",&n);
if (n>20) printf("n值太大\n");
else
{ printf(" %d皇后问题求解如下:\n",n);
queen(n);
system("pause");
}
return 1;
} 已解决 当年毕业论文写到一半,辅导老师突然换了一个课题,更换后的题目就是八皇后非递归解法。回忆啊。 flowdliw 发表于 2020-3-29 22:08
当年毕业论文写到一半,辅导老师突然换了一个课题,更换后的题目就是八皇后非递归解法。回忆啊。
哈哈,鱼友能不能帮看一下 已自行解决 已解决
页:
[1]