wd/ 发表于 2020-3-29 21:33:44

数据结构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;
}

wd/ 发表于 2020-3-30 15:50:15

已解决

flowdliw 发表于 2020-3-29 22:08:05

当年毕业论文写到一半,辅导老师突然换了一个课题,更换后的题目就是八皇后非递归解法。回忆啊。

wd/ 发表于 2020-3-29 22:11:27

flowdliw 发表于 2020-3-29 22:08
当年毕业论文写到一半,辅导老师突然换了一个课题,更换后的题目就是八皇后非递归解法。回忆啊。

哈哈,鱼友能不能帮看一下

wd/ 发表于 2020-3-30 15:46:56

已自行解决

wd/ 发表于 2020-3-30 15:49:36

已解决
页: [1]
查看完整版本: 数据结构c八皇后代码输出有问题