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<stdio.h>
#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<j;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;
}
【问题1】(8分)
根据题干说明,填充C代码中的空(1)(4)。
【问题2】(3分)
根据题干说明和C代码,算法采用的设计策略为(5)。
【问题3】(4分)
当n=4时,有(6)种摆放方式,分别为(7)。
【问题1】
(1)queen[i]==queen[j]或其等价形式
(2)1
(3)Place(j)或其等价形式
(4)Nqueen(j+1)
【问题2】
(5)回溯法
【问题3】
(6)2个
(7)(2413)或(2,4,1,3)
(3142)或(3,1,4,2)
【问题1】
(1)第一空根据代码上下文:
for(i=1;i<j;i++){/*检查与已摆放的皇后是否在同一列或者同一斜线上*/
if((1))‖abs(queen[i]-queen[j])==(j-i)){
return 0;
}
}
abs(queen[i]-queen[j])==(j-i)判断是否在同一斜线上,此处还缺少对同一列的判断,即queen[i]==queen[j]或其等价形式。
(2)第二空根据Place(int j)函数首行注释:
int Place(int j){/*检查当前列能否放置皇后,不能放返回0,能放返回1*/
此处是成功后的返回,返回值应该是1。
(3)第三空根据代码上下文
if((3)){
if(j==n){/*如果所有皇后都摆放好,则输出当前摆放方案*/
Show();
}else{/*否则继续摆放下一个皇后*/
(4);
}
}
(3)与j==n结合可以判断所有皇后都摆好,(3)与j!=n结合可以判断继续摆放下一个皇后,即前面的皇后已摆放好。
所以(3)的判断条件应该是摆放函数Place()返回值为1,即(3)Place(j)或其等价形式。
(4)第四空填写摆放下一个皇后,即(4)Nqueen(j+1)。
【问题2】
根据题干描述“如果该行没有合适的位置,回溯到上一个皇后,考虑在原来位置的下一个位置上继续尝试摆放皇后”,本题采用的是回溯法的设计策略。
【问题3】
当n=4时,可以有2种摆放方式,如下所示:
即(2413)(3142)。
一台主机的IP地址为202.123.25.36,掩码为255.255.254.0。如果该主机需要在该网络进行直接广播,那么它应该使用的目的地址为( )
在计算机系统的日常维护工作中,应当注意硬盘工作时不能__(2)__。另外,需要防范病毒,而__(3)__是不会被病毒感觉的。
有 4 个 IP 地址:201.117.15.254、201.117.17.01、201.117.24.5 和 201.117.29.3,如果子网掩码为 255.255.248.0,则这 4 个地址分别属于3个子网;其中属于同一个子网的是()
在异步通信中,每个字符包含1位起始位、7位数据位、1位奇偶位和1位终止位,每秒钟传送200个字符,采用4相位调制,则码元速率为()。
在 Windows 中,运行( )命令得到下图所示结果。以下关于该结果的叙述中,错误的是( )。
Pinging 59.74.111.8 with 32 bytes of data:
Reply from 59.74.111.8: bytes=32 time=3ms TTL=60
Reply from 59.74.111.8: bytes=32 time=5ms TTL=60
Reply from 59.74.111.8: bytes=32 time=3ms TTL=60
Reply from 59.74.111.8: bytes=32 time=5ms TTL=60
Ping statistics for 59.74.111.8:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 3ms, Maximum = 5ms, Average = 4ms
在ISO OSF/RM参考模型中,七层协议中的__(1)__利用通信子网提供的服务实现两个用户进程之间端到端的通信。在这个模型中,如果A用户需要通过网络向B用户传送数据,则首先将数据送入应用层,在该层给它附加控制信息后送入表示层;在表示层对数据进行必要的变换并加头标后送入会话层;在会话层加头标送入传输层;在传输层将数据分解为__(本题)__后送至网络层;在网络层将数据封装成__(3)__后送至数据链路层;在数据链路层将数据加上头标和尾标封装成__(4)__后发送到物理层;在物理层数据以__(5)__形式发送到物理线路。B用户所在的系统接收到数据后,层层剥去控制信息,把原数据传送给B用户。
在OSI/RM中,解释应用数据语义的协议层是()。
在TCP/IP协议栈中,ARP协议的作用是(),RARP协议的作用是(请作答此空)。
在地址 http://www.dailynews.com.cn/channel/welcome.htm 中,www.dailynews.com.cn 表示( ),welcome.htm 表示(请作答此空)。
在电子表格软件Excel中,假设A1单元格的值为15,若在A2单元格输入“=AND(15<A1,A1<100)”,则A2单元格显示的值为 ()