您的位置:首页 > 编程语言 > PHP开发

递归方法解决八皇后问题

2012-05-08 11:29 134 查看
#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] = '*';
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  output include c