试题三(15分)
阅读以下说明和流程图,从供选择的答案中选出应填入流程图 __(n)__ 处的字句写在答题纸的对应栏内。
[说明]
一个印刷电路板的布线区域可分成n×m个方格,如图3-1(a)所示,现在需要确定电路板中给定的两个方格的中心点之间的最短布线方案。电路只能沿水 平或垂直方向布线,如图3-1(b)中虚线所示。为了避免线路相交,应将已布过线的方格作成封锁标记,其他线路不允许穿过被封锁的方格。
[图3-1]
设给定印刷电路板的起始方格x与目的方格y尚未布线,求这两个方格间最短布线方案的基本思路是:从起始方格x开始,先考查距离起始方格距离为k的某一 个可达方格就是目标方格y时为止,或者由于不存在从x到y的布线方案而终止。布线区域中的每一个方格与其相邻的上、下、左、右四个方格之间的距离为1,依 次沿下、右、上、左这四个方向考查,并用一个队列记录可达方格的位置。表3-1给出了沿这四个方向前进1步时相对于当前方格的相对偏移量。
[表3-1]
搜索顺序i | 方向 | 行偏移量 | 列偏移量 |
0 | 上 | -1 | 0 |
1 | 右 | 0 | 1 |
2 | 上 | -1 | 0 |
3 | 左 | 0 | -1 |
例如,设印刷电路板的布线区域可划分为一个6×8的方格阵列,如图3-2(a)所示,其中阴影表示已封锁方格。从起始方格x( 位置[3,2],标记为0)出发,按照下、右、上、左的方向依次考查,所标记的可达方格如图3-2(a)所示,目标方格为y( 位置[4,7],标记为10),相应的最短布线路径如图3-2(b) 虚线所示。
[图3-2]
图3-3和图3-4所示的流程图即利用上述思想路,在电路板方格阵列中进行标记,图中使用的主要符号如表3-2所示。在图3-4中,设置电路板初始格 局即将可布线方格置为数值-1、已布线方格(即封锁方格)置为-9。设置方格阵列"围墙"的目的是省略方格位置的边界条件判定,方法是在四周附加格,并将 其标记为-9(与封锁标记相同)。
[表3-2]
符号 | 含义 |
Grid | 全局二维数组Grid[N+2,M+2],表示电路板方格阵列,初始时数组元素Grid[i,j]r的值为-1表示当前方格可布线,为-9表示前方格不可布线。 |
Offset | 一维数组offset[4]:offset[i](0≤i≤3)的分量为r(行偏移量)和c(列偏移量),按照表3-1的内容设置其值。 |
Startpos、Endpos、Curpos、T | 分别表示起始方格、目标方格、当前方格和临时方格,其位置用分量度row和col确定。 |
Q.insert(s) | 将方格s的位置信息加入队列 |
Q.delete() | 删除非空队列的队头元素,并返回该元素。 |
Q.empty() | 若队列Q为空,则返回true;否则返回false。 |
[图3-3]
[图3-4]
●供选择的答案
[a] Found≠true [b] Found = true
[c] T = EndPos [d] Q.insert(T)
[e] T ← Q.delete() [f] CurPos = EndPos
[g] i≥4 [h] CurPos ← Q.delete()
[i] Grid[T.row,T.col] = -1 [j] Grid[T.row,T.col]≠-1