在`Build_AdjList`算法中,`t=getchar();h=getchar();`的目的是获取弧的起点和终点。如果输入'A B',且`LocateVex(G,'A')`返回0,`LocateVex(G,'B')`返回1,则执行完`p->adjvex=j;`后,以下哪个描述正确?
答案解析
核心考点说明: `adjvex` 的含义, `LocateVex` 函数,邻接表结构。
解题思路分析: 代码中,`LocateVex(G,t)` 返回弧尾 `t` 在顶点数组中的索引 `i`, `LocateVex(G,h)` 返回弧头 `h` 在顶点数组中的索引 `j`。 `p->adjvex=j;`是将弧头`h`在顶点数组中的索引值赋值给新弧节点的`adjvex`字段。题目已知`LocateVex(G,'A')` 返回 0, `LocateVex(G,'B')` 返回 1,因此 `j` 的值为 1,`p->adjvex`的值就是1。
选项分析:
A. 错误。`p->adjvex` 存储的是弧头的索引,即顶点 'B' 的索引,而不是 'A'的索引。
B. 正确。 `j` 是顶点 'B' 的索引 1, `p->adjvex` 将会被赋值为 1,表示新弧指向顶点 'B'。
C. 错误。`p->adjvex` 赋值的是 `j` 的值, `j` 是弧头的索引,与`i`无关。
D. 错误。`LocateVex`保证了返回的索引值在顶点数组的有效范围内,不会出现越界访问的情况。
易错点提醒: 注意`p->adjvex` 存储的是**弧头**的索引值,而不是弧尾的索引值,容易混淆弧头和弧尾的概念。
正确答案:B