鱼C论坛

 找回密码
 立即注册
查看: 2987|回复: 5

数据结构c八皇后代码输出有问题

[复制链接]
发表于 2020-3-29 21:33:44 | 显示全部楼层 |阅读模式
30鱼币
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct
{        int c[MaxSize];                                        //c[i]存放第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[i]);
        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[i]==St.c[k]||(St.c[k]-St.c[i])==(k-i)||(St.c[k]-St.c[i])==(i-k))
                return false;
        return true;                                //没有冲突时返回真
}
void queen(int n)                                //求解n皇后问题
{        St.top=0;                                        //初始化栈顶指针,为了让皇后从第1行开始,不用下标0
        St.c[++St.top]=0;                        //进栈。c[1]=0,表示从第1个皇后开始,初始列号为0,因为后面要++
        while (St.top>0)                        //栈不空时循环
        {       
                for(++St.c[St.top];St.c[St.top]<=n;St.c[St.top]++)
                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;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-30 15:50:15 | 显示全部楼层
已解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-29 22:08:05 | 显示全部楼层
当年毕业论文写到一半,辅导老师突然换了一个课题,更换后的题目就是八皇后非递归解法。回忆啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

哈哈,鱼友能不能帮看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-30 15:46:56 | 显示全部楼层
已自行解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-30 15:49:36 | 显示全部楼层
已解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 07:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表