| 
 | 
 
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; 
} |   
 
 
 
 
 
 |