wd/ 发表于 2020-3-29 15:12:21

有鱼友帮看一下这个程序问题出在哪里吗

本帖最后由 wd/ 于 2020-3-29 21:09 编辑

#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.c=0;
                        }
                        else{St.top++;}
                        }
                        else{St.c=0;}
        }
}
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;
}

js0086 发表于 2020-3-31 14:30:22

感觉你在这块出错了{      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");
      }
(纯粹是感觉{:10_256:})

璀璨·狸 发表于 2020-4-1 08:17:01

js0086 发表于 2020-3-31 14:30
感觉你在这块出错了{      int c;                                        //c存放第i个皇后的 ...

观摩大佬,谢谢楼主

永远的渣滓 发表于 2020-4-1 10:27:41

鱼币

bailean 发表于 2020-4-1 11:22:34

小菜鸡一枚,来学习学习

goingkui 发表于 2020-4-1 18:44:29

学习
页: [1]
查看完整版本: 有鱼友帮看一下这个程序问题出在哪里吗