递归方法解决八皇后问题

#include <stdio.h>

static char Queen[8][8];
static int a[8];        //列冲突
static int b[15];       //主对角线冲突
static int c[15];       //次对角线冲突
static int iQueenNum = 0;       //8皇后摆放方式计数

void qu(int i);         //递归摆放8皇后方法
void init();            //初始化全局变量

int main()
{
        init();
        qu(0);
}

void init() {
        for (int i = 0; i < 8; i++) {
                a[i] = 0;
                for (int j = 0; j < 8; j++) {
                        Queen[i][j] = '*';
                }
        }

        for (int i=0; i<15; i++)
                b[i] = c[i] = 0;
}

void output() {
        for (int i=0; i<8; i++) {
                for (int j=0; j<8; j++) {
                        printf("%c ", Queen[i][j]);
                }
                printf("\n");
        }
        printf("-----%04d------\n", iQueenNum++);
}

void qu (int iLin) {
        int iCol = 0;
        for (iCol = 0; iCol < 8; iCol++) {
                if (a[iCol] == 0 && b[iCol-iLin+7] == 0 && c[iCol+iLin] == 0) {
                        a[iCol] = b[iCol-iLin+7] = c[iCol+iLin] = 1;
                        Queen[iLin][iCol] = '#';
                        if (iLin == 7) {
                                output();
                        }
                        else {
                                qu (iLin+1);
                        }

                        a[iCol] = b[iCol-iLin+7] = c[iCol+iLin] = 0;
                        Queen[iLin][iCol] = '*';
                }
        }
}


你可能感兴趣的:(c,include,output)