用C++编写题目设有一有向图G,采用邻接表存储,输入某一顶点的存储编号(下标),现要求设计一个函数,用于输出图中该顶点的出度。输入描述:第一行表示图的顶点数;第二行表示图的边数;后面有若干行,每一行表示每条边所依附的顶点的存储编号(下标),两个下标之间用空格隔开;最后一行表示要处理的顶点的存储编号(下标)。输出描述:指定顶点的出度值;若指定的顶点不存在,则输出“no this vex”并退出程序。样例输入:4 4 0 1 0 2 2 3 3 0 0 样例输出:2
时间: 2023-12-06 21:44:24 浏览: 61
好的,您的问题是如何用C编写一个函数来输出图中指定顶点的出度值,是吗?
是的。题目设有一个有向图G,采用邻接表存储。输入某一顶点的存储编号(下标),现要求设计一个函数,用于输出图中该顶点的出度。
好的,那么首先需要定义一个邻接表来存储图,然后输入顶点数和边数,建立邻接表。代码如下所示:
```c
#include<stdio.h>
#include<stdlib.h>
#define MaxVertexNum 100
typedef struct ArcNode{
int adjvex; //邻接顶点下标
struct ArcNode *next; //指向下一个邻接节点的指针
} ArcNode;
typedef struct VertexNode{
char data; //顶点信息
ArcNode *firstarc; //指向第一条依附该顶点的边的指针
} VertexNode;
typedef struct{
VertexNode vexs[MaxVertexNum]; //顶点数组
int vexnum,arcnum; //图的当前顶点数和边数
} ALGraph;
//建立图的邻接表
void CreateGraph(ALGraph *G){
scanf("%d %d",&(G->vexnum),&(G->arcnum)); //输入顶点数和边数
for(int i = 0;i < G->vexnum;i++){
scanf(" %c",&(G->vexs[i].data));
G->vexs[i].firstarc = NULL;
}
for(int k = 0;k < G->arcnum;k++){ //输入每条边所依附的顶点的下标
int i,j;
scanf("%d %d",&i,&j);
ArcNode *e = (ArcNode*)malloc(sizeof(ArcNode));
e->adjvex = j;
e->next = G->vexs[i].firstarc;
G->vexs[i].firstarc = e;
}
return;
}
```
接下来根据输入的顶点的存储编号(下标),找到该顶点的出度。如果该顶点存在,则遍历其邻接链表,记录该顶点的出度值并输出;否则输出"no this vex"并退出程序。代码如下所示:
```c
//计算指定顶点的出度值
int GetOutDegree(ALGraph *G,int vex_index){
if(vex_index >= G->vexnum || vex_index < 0){ //指定的顶点不存在
printf("no this vex\n");
exit(0);
}
int out_degree = 0;
ArcNode *p = G->vexs[vex_index].firstarc;
while(p != NULL){ //遍历该顶点的邻接链表
out_degree++;
p = p->next;
}
return out_degree;
}
int main(){
ALGraph G;
CreateGraph(&G);
int vex_index;
scanf("%d",&vex_index);
printf("%d\n",GetOutDegree(&G,vex_index));
return 0;
}
```
这样,就完成了用C编写一个函数来输出图中指定顶点的出度值的任务。
阅读全文