题目内容 (请给出正确答案)
[主观题]

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。【说明】对有向图进行拓扑排序

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。

【说明】

对有向图进行拓扑排序的方法是:

(1)初始时拓扑序列为空;

(2)任意选择一个入度为0的顶点,将其放入拓扑序列中,同时从图中删除该顶点以及从该顶点出发的弧;

(3)重复(2),直到不存在入度为0的顶点为止(若所有顶点都进入拓扑序列则完成拓扑排序,否则由于有向图中存在回路无法完成拓扑排序)。

函数int*TopSort(LinkedDigraph G)的功能是对有向图G中的顶点进行拓扑排序,返回拓扑序列中的顶点编号序列,若不能完成拓扑排序,则返回空指针。其中,图G中的顶点从1开始依次编号,顶点序列为vl,v2,…,vn,图G采用邻接表表示,其数据类型定义如下:

define MAXVNUM 50 /*最大顶点数*/

typedef struct ArcNode| /*表结点类型*/

int adjvex; /*邻接顶点编号*/

struct ArcNode*nextarc; /*指示下一个邻接顶点*/

{ArcNode;

typedef struct AdjList{ /*头结点类型*/

char vdata; /*顶点的数据信息*/

ArcNode*firstarc; /*指向邻接表的第一个表结点*/

}AdjList;

typedef struct LinkedDigraph /*图的类型*/

int n: /*图中顶点个数*/

AdjList Vhead[MAXVNUM]; /*所有顶点的头结点数组*/

}LinkedDigraph;

例如,某有向图G如图4-1所示,其邻接表如图4-2所示。

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。【说明】对有向图进行拓扑排序阅

函数TopSort中用到了队列结构(Queue的定义省略),实现队列基本操作的函数原型如下表所示:

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。【说明】对有向图进行拓扑排序阅

【C代码】

int*TopSort(LinkedDigraph G){

ArcNode*P; /*临时指针,指示表结点*/

Queue Q; /*临时队列,保存入度为0的顸点编号*/

int k=0; /*临时变量,用作数组元素的下标*/

int j=0,w=0; /*临时变量,用作顶点编号*/

int*topOrder,*inDegree;

topOrder=(int*)malloc((G.n+1)*sizeof(int));/*存储拓扑序列中的顶点编号*/

inDegree=(int*)malloc((G.n+1)*sizeof(int));/*存储图G中各顶点的入度*/

if(!inDegree||!topOrder) return NULL;

(1); /*构造一个空队列*/

for(j=1;j<=Gn;j++){ /*初始化*/

topOrder[j]=0;inDegree[j]=0;

}

for(j=1;j<=Gn;j++) /*求图G中各顶点的入度*/

for(p=G.Vhead[j].firstarc;p;p=p->nextarc)

inDegree[P->adjvex]+=1;

for(j=i;j<=G.n;J++) /*将图G中入度为0的顶点保存在队列中*/

if(0==inDegree[j]) EnQueue(&Q,j);

while(! IsEmpty(Q)){

(2); /*队头顶点出队列并用w保存该顶点的编号*/

topOrder[k++]=w; /*将顶点W的所有邻接顶点的入度减l(模拟删除顶点w及该顶点出发的弧的操作)*/

for(p=G.Vhead[w].firstarc;p;p=p->nextarc){

(3)-=1;

if(0== (4) ) EnQueue(&Q,P->adjvex);

}/*for*/

}/ * while*/

free(inDegree);

if((5) )

return NULL;

return topOrder;

}/*TopSort*/

根据以上说明和C代码,填充C代码中的空(1)

查看答案
如搜索结果不匹配,请 联系老师 获取答案
您可能会需要:
您的账号:,可能会需要:
您的账号:
发送账号密码至手机
发送
发送账号至手机
密码将被重置
获取验证码
发送
温馨提示
该问题答案仅针对搜题卡用户开放,请点击购买搜题卡。
马上购买搜题卡
我已购买搜题卡, 登录账号 继续查看答案
重置密码
确认修改
温馨提示
每个试题只能免费做一次,如需多次做题,请购买搜题卡
立即购买
稍后再说
警告:系统检测到您的账号存在安全风险

为了保护您的账号安全,请在“赏学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!

微信搜一搜
赏学吧
点击打开微信
警告:系统检测到您的账号存在安全风险
抱歉,您的账号因涉嫌违反赏学吧购买须知被冻结。您可在“赏学吧”微信公众号中的“官网服务”-“账号解封申请”申请解封,或联系客服
微信搜一搜
赏学吧
点击打开微信