问题 填空题

[说明]
八皇后问题是指求解如何在国际象棋8*8棋盘上无冲突地放置八枚皇后棋子。因为在国际象棋里,皇后的移动方式是横竖交叉,所以在任意一个皇后所在位置的水平、竖赢和斜45。线上都不能有其他皇后棋子的存在。一个完整无冲突的八皇后棋子分布称为八皇后问题的一个解。本程序实现了八枚皇后棋子在8*8棋盘上无冲突的放置。
[函数]
#include<math. h>
#include<stdio.h>
#define MAX 8 /*棋子数及棋盘大小MAX*MAX*/
int board [MAX];
/*印出结果*/
void show_result()

int i;
for (i=0;i<MAX;i++)
printf("(%d, %d)",i,board [i]);
printf("\n");

/*检查是否在同一直横斜线上有其他棋子*/
int check_cross (int n)

int i;
for(i=0; i<n; i++)
if( (1) )return 1;

return 0;

/*放棋子到棋盘上*/
void put_chess (int n)

int i;
for (i=0; i<MAX; i++)
board [n] =i;
if( (2) )
if( (3) )show_result();
/*找到其中一种放法了,印出结果*/
else (4) ;



void main()

clrscr();
puts("The possible placements are:");
(5) ;
puts("\n Press any key to quit…");
getch();
return:

答案

参考答案:put_chess(0)

解析: 程序使用了回溯的方法来解决八皇后问题,也就是逐次试探的方法。这个方法通过函数put-chess()对自身的递归调用来实现。运行程序后,主函数调用put_chess()函数在棋盘第一行第一列上放置棋子,开始向下一行递归,所以空(5)处填入put_chess(0)。每一步递归中,首先检测待做位置有没有冲突出现。如果没有冲突就放下棋子,并进入下一行递归,否则检测该行的下一个位置,所以空(2)处填入!check_cross(n), 空(1)处填入board[i]==board[n]||(n-i)==abs(board[i]-board[n])。如果整个一行中没有可以放置的位置,就退回上一层递归,所以空(4)处填入put_chess(n+1)。最后,如果本次放置成功,并且递归调用深度为7,就打印输出结果,所以空(3)处填入n==MAX-1。

单项选择题
单项选择题