-->
当前位置:首页 > 题库 > 正文内容

函数题:统计有向图中各顶点的出度与统计有向图中出度为n的顶点个数(邻接表)

Luz3年前 (2022-09-16)题库447
本题要求实现2个函数,统计有向图中各顶点的出度,并统计出度为n的顶点个数。

### 函数接口定义:
c++
void OutDegree(LGraph Graph,int *num); //统计有向图中各顶点的出度
int countOutDegree(LGraph Graph,int n); //统计有向图中出度为n的顶点个数

其中,Graph为采用邻接表作为存储结构的有向图。

### 裁判测试程序样例:
c++
#include <stdio.h>
#include <stdlib.h>
#define MAXVERTEXNUM 100

//邻接点的定义
typedef struct AdjVNode *PtrToAdjVNode;
struct AdjVNode{
int AdjV; //邻接点的下标
PtrToAdjVNode Next; //指向下一个邻接点的指针
};

//顶点表头结点的定义
typedef struct VNode{
char Data; //顶点数据
PtrToAdjVNode FisrtEdge; //边表头指针
}AdjList[MAXVERTEXNUM]; //AdjList是邻接表类型

typedef struct GNode *PtrToGNode;
struct GNode{
int Nv; //顶点数
int Ne; //边数
AdjList G; //邻接表
};

typedef PtrToGNode LGraph; //以邻接表方式存储的图类型

void OutDegree(LGraph Graph,int *num); //统计有向图中各顶点的出度
int countOutDegree(LGraph Graph,int n); //统计有向图中出度为n的顶点个数

LGraph BuildGraph()
{
int v,i,k,j;
LGraph Graph;
PtrToAdjVNode NewNode;

Graph = (LGraph)malloc(sizeof(struct GNode));

scanf("%d %d",&Graph->Nv,&Graph->Ne);

for(v = 0;v < Graph->Nv; v++){
getchar();
scanf("%c",&Graph->G[v].Data);
Graph->G[v].FisrtEdge = NULL; //将指向边表的指针初始化
}

//建立边表
char vi,vj;
for(k = 0;k < Graph->Ne; k++){ //k记录插入边的个数
getchar();
scanf("%c %c",&vi,&vj);

for(i = 0; Graph->G[i].Data != vi; i++)
; //找vi在顶点数组中的下标
for(j = 0; Graph->G[j].Data != vj; j++)
; //找vj在顶点数组中的下标

//为vj建立新的邻接点
NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
NewNode->AdjV = j;
NewNode->Next = Graph->G[i].FisrtEdge; //头插法插入边结点
Graph->G[i].FisrtEdge = NewNode;
}
return Graph;
}

int main(){
LGraph Graph2;
int i;

int num[100]={0}; //num统计各顶点的入度
Graph2 = BuildGraph();

OutDegree(Graph2,&num[0]);
for(i = 0;i< Graph2->Nv; i++)
{
printf("顶点%c的出度为:%d",Graph2->G[i].Data,num[i]);
printf("\n");
}

int num1;
num1 = countOutDegree(Graph2,3);
printf("出度为3的顶点个数为:%d",num1);

return 0;
}
/* 请在这里填写答案 */


![图片1.png](~/c09731f7-804b-437f-8b09-854143cf1a86.png)

### 输入样例:
in
5 7
A B C D E
A B
A E
B D
C B
D A
D C
D E


### 输出样例:
out
顶点A的出度为:2
顶点B的出度为:1
顶点C的出度为:1
顶点D的出度为:3
顶点E的出度为:0
出度为3的顶点个数为:1






答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。