递归N皇后问题
作者:
level102
,
2025-04-23 20:26:18
· 广东
,
所有人可见
,
阅读 1
int answer = 0;
int q[N + 1];//存储皇后的列号
int check(int j){//检查第j个皇后的位置是否合法
int i;
for(i = 1;i < j;i ++){
//判断是否在同一行或者同一斜线上
if(q[i] == q[j] || abs(q[i] - q[j]) == abs(i - j))
return 0;
}
return 1;
}
void queen(int j){
int i;
for(i = 1;i <= N;i ++){
q[j] = i;
if(check(j)){//当摆放的皇后位置为合法时
if(j == N){//找到了N皇后的一组解
answer = answer + 1;
printf("方案%d: ",answer);
for(i = 1;i <= N ;i ++){
printf("%d ",q[i]);
}
printf("\n");
}else{
queen(j + 1);//递归摆放下一个皇后的位置
}
}
}
}
int main(){
queen(1);
return 0;
}