数据结构(C语言实现)当中关于八皇后的问题!急.....

来源:百度知道 编辑:UC知道 时间:2024/05/26 20:53:18
设计程序完成如下要求:在8×8的国际象棋棋盘上,放置8个皇后,使得这8个棋子不能互相被对方吃掉。要求:(1)依次输出各种成功的放置方法。(2)最好能画出棋盘的图形形式,并在其上动态地标注行走的过程。(3)程序能方便地移植到其他规格的棋盘上。从第一行起逐行放置皇后,每放置一个皇后均需要对第1,2,…,8列进行试探,并尽可能取小的列数。若当前试探的列位置是安全的,则将该行的列位置保存在栈中,然后继续在下一行寻找安全位置,若当前试探的列位置不安全,则用下一列试探;当8列位置试探完毕都未找到安全位置时,就退栈回溯到上一行,修改栈顶保存的皇后位置,然后继续试探。要求能在VC6.0正确运行!把有关注释写清楚!写出其源代码!!!!谢谢.....

#include <stdio.h>
#include <stdlib.h>
#define N 8
int column[N+1];
// 同列是否有皇后,1表示有
int rup[2*N+1]; // 右上至左下是否有皇后
int lup[2*N+1]; // 左上至右下是否有皇后
int queen[N+1] = {0};
int num; // 解答编号
void backtrack(int); // 递归求解
int main(void) {
int i;
num = 0;
for(i = 1; i <= N; i++)
column[i] = 1;
for(i = 1; i <= 2*N; i++)
rup[i] = lup[i] = 1;
backtrack(1);
return 0;
}
void showAnswer() {
int x, y;
printf("\n解答 %d\n", ++num);
for(y = 1; y <= N; y++) {
for(x = 1; x <= N; x++) {
if(queen[y] == x) {
printf(" Q");
}
else {
printf(" .");
}
}