Kahn链路预测算法.pdfVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Kahn链路预测算法

算法步骤

遍历所有图顶点,把入度为0的顶点入队

当队列不为空时,取出一个顶点v输出

将与v相邻的顶点入度减1,然后把减1后入度为0的顶点入

重复2,3步,直到队列为空,算法结束

代码实现

#includeiostream

#includealgorithm

#includecstdlib

usingnamespacestd;

constintMaxV=100;

/*定义队列*/

typedefstructQNode{

int*Data;

intFront,Rear;

intMaxSize;

}*Queue;

/*定义边*/

typedefstructENode{

intv1,v2;

intWeight;

}*Edge;

/*定义邻接结点*/

structAdjVNode{

intAdjV;

intWeight;

AdjVNode*Next;

};

/*定义邻接表头*/

typedefstructVNode{

AdjVNode*EdgeFirst;

//booltag;//标记是否被访问,该题不需要此标记,入度

为0后,邻接表就不会在访问它了

intIndegree;//该结点的入度数

}AdjList[MaxV];

/*定义图*/

typedefstructGNode{

intNv,Ne;

AdjListL;

}*LGraph;

/*创建队列并初始化*/

QueueCreateQueue(intMaxSize)//给定队列最大长度

{

QueueQ=(Queue)calloc(1,sizeof(QNode));

Q-Data=(int*)calloc(MaxSize,sizeof(int));

Q-MaxSize=MaxSize;

returnQ;

}

/*入队操作*/

voidAddQ(QueueQ,intx)

{

Q-Rear=(Q-Rear+1)%Q-MaxSize;

Q-Data[Q-Rear]=x;

}

/*出队操作*/

intDeleteQ(QueueQ)

{

Q-Front=(Q-Front+1)%Q-MaxSize;

returnQ-Data[Q-Front];

}

/*

队列空:Q-Front==Q-Rear;

队列满:(Q-Rear+1)%Q-MaxSize==Q-Front;

*/

/*创造有Nv各结点的无边图*/

LGraphCreateGraph(intNv)

{

LGraphG=(LGraph)calloc(1,sizeof(GNode));

G-Nv=Nv;

returnG;

}

/*给图插入边*/

voidInsertEdge(LGraphG,EdgeE)

{

AdjVNode*A=(AdjVNode*)malloc(sizeof(AdjVNode));

A-AdjV=E-v2;

A-Next=G-L[E-v1].EdgeFirst;

G-L[E-v1].EdgeFirst=A;

}

/*创建图表*/

LGraphBuildGraph()

{

intNv;cinNv;

LGraphG=CreateGraph(Nv);

cinG-Ne;

EdgeE=(Edge)malloc(sizeof(ENode));

for(inti=0;iG-Ne;i++)

{

cinE-v1E-v2;

InsertEdge(G,E);

G-L[E-v2].Indegree++;//计算入度

}

free(E);

returnG;

您可能关注的文档

文档评论(0)

159****9831 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档