【正确答案】(1)数据结构
采用有向图的邻接表(出边表)表示法。
(2)思路
图有3种表示方法:出边表(邻接表的一种)、入边表(邻接表的一种)和邻接矩阵。相应的有3种算法。设n为顶点数,m为边数。
对于出边表,顺序搜索一遍边即可,时间代价为O(m)。
对于入边表,判断指定顶点的边表头指针是否非空即可,时间代价为O(1)。
对于邻接矩阵,搜索矩阵中指定顶点对应的列,判断其中是否有非0元即可,时间代价为O(n)。
以出边表为例,给出一个算法如下。
(3)算法
int is_end(GraphList g,int k){
/*判断图g中是否有边指向第k个结点(0<=k<=g.n-1)*/
EdgeList p;
inti;
for(i=0;i<g.n;i++){
p=g.vexs[i].edgelist;
while(p!=NULL){
if(p->endvex==i)return 1;
p=p->nextedge;
}
}
return 0;
}
(4)代价分析
该算法的时间复杂度为O(m)。
【答案解析】