八皇后问题 的92种结果

来源:互联网 发布:守望先锋 网络同步 编辑:程序博客网 时间:2024/05/17 23:54

八皇后问题求解代码:

#include<stdio.h>#include<stdlib.h>#define N 8int column[N+1]; // 同栏是否有皇后, 1表示有int rup[2*N+1]; // 右上至左下是否有皇后int lup[2*N+1]; // 左上至右下是否有皇后int queen[N+1] = {0};int num; // 解答编号void backtrack(int);// 递回求解int main(void) {        int i;        num = 0;        for(i=1;i<=N;i++)                column[i]=1;        for(i=1;i<=2*N;i++)                rup[i]=lup[i]=1;        backtrack(1);        return 0;}void showAnswer(){        int x,y;        printf("\n解答 %d\n",++num);        printf("     ");        for(int i=1;i<=8;i++)printf("%d ",i);        printf("\n");        for(y=1;y<=N;y++)//y是行号        {                printf("  %d  ",y);                for(x=1;x<=N;x++)//x是列号                {                        if(queen[y]==x)                        {                                printf("Q ");                        }                        else                        {                                printf(". ");                        }                }                printf("\n");        }}void backtrack(int i)//i为行数{        int j;        if(i>N)        {                showAnswer();        }        else        {                for(j=1;j<=N;j++)//j为列数                {                        //判断同一列,斜对角线是否有皇后                        if(column[j]==1&&rup[i+j]==1&&lup[i-j+N]==1)                        {                                 // 设定为占用                                 queen[i]=j;                                 column[j]=rup[i+j]=lup[i-j+N]=0;                                 backtrack(i+1);                                 column[j] = rup[i+j] = lup[i-j+N] = 1;                        }                }        }}
0 0
原创粉丝点击