首页 > 代码库 > 八皇后
八皇后
#include <stdio.h>
#include <stdlib.h>
int sum = 0;
const int max=8; //max为最大坐标
void show(int result[]){
for(int i = 0; i < max; i++)
{
printf("(%d,%d) ", i, result[i]);
}
printf("/n");
sum++;
}
int main(){
int result[max];
Queen(result, 0); //从横坐标为0开始,依次尝试
printf("total: %d enums./n", sum);
system("pause");return 0;
} //输出所有皇后的坐标
bool check(int result[], int x){
for(int i = 0; i < x; i++) //检查横排以及对角线上能否放置皇后
{
if(result[i] == result[x] || abs(result[i] - result[x]) == (x - i))
{
return false;
}
}
return true;
} // 检查当前列能否放置皇后
void Queen(int result[], int x){
if(x == max)
{
show(result); //若全部摆好,则输出所有皇后坐标
return;
} // 回溯尝试皇后位置,n为横坐标
for(int i = 0; i < max; i++)
{
result[x] = i; //将皇后摆到当前循环到的位置上
if(check(result, x))
{
Queen(result, x + 1); //否则继续摆放下一个皇后
}
}
}
八皇后