再帰的な方法で八皇后問題を解決する


#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("
"); } printf("-----%04d------
", 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] = '*'; } } }