设有一有向图G,采用邻接表存储,输入某一顶点的存储编号(下标),现要求设计一个函数,用于输出图中该顶点的出度。 输入描述 第一行表示图的顶点数;第二行表示图的边数;后面有若干行,每一行表示每条边所依附的顶点的存储编号(下标),两个下标之间用空格隔开;最后一行表示要处理的顶点的存储编号(下标)。 输出描述 指定顶点的出度值;若指定的顶点不存在,则输出“no this vex”并退出程序。 的代码
时间: 2024-02-20 16:56:26 浏览: 106
以下是 C++ 代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> graph(n); // 邻接表存储图
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
graph[u].push_back(v);
}
int k;
cin >> k; // 要处理的顶点的存储编号
if (k < 0 || k >= n) {
cout << "no this vex" << endl;
return 0;
}
cout << graph[k].size() << endl; // 输出该顶点的出度
return 0;
}
```
解释如下:
- 首先读入顶点数 n 和边数 m,然后创建一个大小为 n 的 vector,每个元素也是一个 vector,用于存储该顶点的所有出边。
- 接着循环读入每条边,将起点 u 对应的 vector 中加入终点 v。
- 最后读入要处理的顶点的存储编号 k,检查其是否在合法范围内,如果不是则输出 "no this vex" 并退出程序。
- 如果 k 合法,则输出该顶点的出度,即该顶点对应的 vector 的大小。
相关问题
题目描述 设有一有向图G,采用邻接表存储,输入某一顶点的存储编号(下标),现要求设计一个函数,用于输出图中该顶点的出度。 输入描述 第一行表示图的顶点数;第二行表示图的边数;后面有若干行,每一行表示每条边所依附的顶点的存储编号(下标),两个下标之间用空格隔开;最后一行表示要处理的顶点的存储编号(下标)。 输出描述 指定顶点的出度值;若指定的顶点不存在,则输出“no this vex”并退出程序。 样例输入 4 4 0 1 0 2 2 3 3 0 0 样例输出 2
好的,根据你的要求,我理解了你的问题,答案是:
你需要设计一个函数,输入一个有向图的顶点的存储编号,输出该顶点的出度。具体输入格式为:第一行表示图的顶点数;第二行表示图的边数;后面有若干行,每一行表示每条边所依附的顶点的存储编号(下标),两个下标之间用空格隔开;最后一行表示要处理的顶点的存储编号(下标)。输出为指定顶点的出度值;若指定的顶点不存在,则输出“no this vex”并退出程序。
以下是代码实现,其中使用了邻接表存储有向图:
```
#include <cstdio>
#include <vector>
using namespace std;
const int MAXN = 100005;
vector<int> G[MAXN]; // 邻接表存储图
int in_degree[MAXN], out_degree[MAXN]; // 记录每个顶点的入度和出度
int main() {
int n, m;
scanf("%d %d", &n, &m);
// 读入边,构建邻接表
for (int i = 1; i <= m; i++) {
int u, v;
scanf("%d %d", &u, &v);
G[u].push_back(v);
}
// 计算每个顶点的出度和入度
for (int u = 0; u < n; u++) {
for (int i = 0; i < G[u].size(); i++) {
int v = G[u][i];
out_degree[u]++; // 出度加一
in_degree[v]++; // 入度加一
}
}
int target;
scanf("%d", &target); // 读入要求出度的顶点编号
if (target >= n || target < 0) {
printf("no this vex\n"); // 处理顶点不存在的情况
return 0;
}
printf("%d\n", out_degree[target]); // 输出目标顶点的出度
return 0;
}
```
用C++编写题目设有一有向图G,采用邻接表存储,输入某一顶点的存储编号(下标),现要求设计一个函数,用于输出图中该顶点的出度。输入描述:第一行表示图的顶点数;第二行表示图的边数;后面有若干行,每一行表示每条边所依附的顶点的存储编号(下标),两个下标之间用空格隔开;最后一行表示要处理的顶点的存储编号(下标)。输出描述:指定顶点的出度值;若指定的顶点不存在,则输出“no this vex”并退出程序。样例输入:4 4 0 1 0 2 2 3 3 0 0 样例输出:2
好的,您的问题是如何用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编写一个函数来输出图中指定顶点的出度值的任务。
阅读全文