结构推理 写一个算法,判断对给定有向图中的指定顶点是否至少存在一条有向边指向它。
【正确答案】(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)。
【答案解析】