软考真题
第4题
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。

【说明】

n皇后问题描述为:在一个n×n的棋盘上摆放n个皇后,要求任意两个皇后不能冲突,即任意两个皇后不在同一行、同一列或者同一斜线上。

算法的基本思想如下:

将第i个皇后摆放在第i行,i从1开始,每个皇后都从第1列开始尝试。尝试时判断在该列摆放皇后是否与前面的皇后有冲突,如果没有冲突,则在该列摆放皇后,并考虑摆放下一个皇后;如果有冲突,则考虑下一列。如果该行没有合适的位置,回溯到上一个皇后,考虑在原来位置的下一个位置上继续尝试摆放皇后,……,直到找到所有合理摆放方案。

【C代码】

下面是算法的C语言实现。

(1) 常量和变量说明

n: 皇后数,棋盘规模为n×n

queen[]: 皇后的摆放位置数组, queen[i]表示第i个皇后的位置, 1≤queen[i]≤n

(2) C程序


#include 
#define n 4
int queen[n+1];
void Show() {
	/* 输出所有皇后摆放方案 */
	int i;
	printf("(");
	for (i=1;i<=n;i++) {
		printf(" %d",queen[i]);
	}
	printf(")/n");
}
int Place(int j) {
	/* 检查当前列能否放置皇后,不能放返回0,能放返回1 */
	int i;
	for (i=1;i
	if( (1) ) ‖ abs(queen[i]-queen[j]) == (j-i)) {
		return 0;
	}
}
return (2) ;
}
void Nqueen(int j) {
int i;
for (i=1;i<=n;i++) {
	queen[j] = i;
	if( (3) ) {
		if(j == n) {
			/* 如果所有皇后都摆放好,则输出当前摆放方案 */
			Show();
		} else {
			/* 否则继续摆放下一个皇后 */
			(4) ;
		}
	}
}
}
int main() {
Nqueen (1) ;
return 0;
}

问题:4.1
【问题1】(8分)
根据题干说明,填充C代码中的空(1)〜(4)。
问题:4.2
【问题2】(3分)
根据题干说明和C代码,算法采用的设计策略为 (5)。
问题:4.3
【问题3】(4分)
当n=4时,有 (6) 种摆放方式,分别为 (7) 。
2019��������� ��������������������������� ������������������������������������ ������������������
正确答案:
你的答案:
请先在app激活
知识点:
常量
试卷:
2019年 上半年 下午试卷 案例

笔记

请先在app激活

2019-11-07


请先在app激活

2019-11-04


请先在app激活

2019-11-04


请先在app激活

2019-09-29


请先在app激活

2019-10-29


请先在app激活

2019-10-20


请先在app激活

2019-11-02


失之定归

请先在app激活

2020-04-04


请先在app激活

2020-11-04


rambo

请先在app激活

2020-11-04


阿登

请先在app激活

2021-05-22


无关几何

请先在app激活

2021-10-26


请先在app激活

2019-10-26


请先在app激活

2019-11-08


微风佛面

请先在app激活

2020-10-30


巧克力金鱼

请先在app激活

2022-05-01


请先在app激活

2022-05-05


czj

请先在app激活

2022-05-10


GuaRdianKai

请先在app激活

2022-05-23


蛮龙

请先在app激活

2022-05-24


答题卡
加油
纠错
得分:0