// 八皇后.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#define N 8
int a[N];
int count = 0;
void place(int row, int index) {
a[row] = index;
}
void print_result() {
int i;
for (i = 0; i<N; ++i) {
printf("%d", a[i] + 1);
}
printf("\n");
count++;
}
int available(int row, int index) {//第row行能否在index位置放置
int j;
for (j = 0; j<row; ++j) {//row行前面的j行里
if (a[j] == index) return 0; //不能在同一列
if (abs(row - j) == abs(a[j] - index)) return 0;//row行与j行的距离不能等于j行的a[j]列与row行的index列的距离
}
return 1;
}
void find(int row)
{
int i;
if (N == row) {
print_result();
}
else {
for (i = 0; i<N; ++i) {
if (available(row, i)) {
place(row, i);
find(row + 1);
}
}
}
}
int main(int argc, char* argv[])
{
find(0);
printf("%d\n", count);
return 0;
}
05-24