使用c语言解决计算有向图的度 要求有主函数
时间: 2024-03-18 21:41:53 浏览: 19
好的,以下是使用 C 语言计算有向图的出度和入度的示例代码,包含主函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 100
// 邻接表中的边结构体
typedef struct EdgeNode {
int adjvex; // 邻接点下标
struct EdgeNode *next; // 指向下一个邻接点的指针
} EdgeNode;
// 邻接表中的顶点结构体
typedef struct VertexNode {
int data; // 顶点数据
EdgeNode *first_edge; // 指向第一条依附该顶点的边的指针
} VertexNode, AdjList[MAX_VERTICES];
// 图结构体
typedef struct {
AdjList adj_list; // 邻接表
int num_vertices; // 图中顶点数
int num_edges; // 图中边数
} Graph;
// 初始化图
void init_graph(Graph *graph, int num_vertices) {
graph->num_vertices = num_vertices;
graph->num_edges = 0;
for (int i = 0; i < num_vertices; i++) {
graph->adj_list[i].data = i;
graph->adj_list[i].first_edge = NULL;
}
}
// 添加有向边
void add_directed_edge(Graph *graph, int start, int end) {
EdgeNode *new_edge = (EdgeNode *) malloc(sizeof(EdgeNode));
new_edge->adjvex = end;
new_edge->next = graph->adj_list[start].first_edge;
graph->adj_list[start].first_edge = new_edge;
graph->num_edges++;
}
// 计算有向图中每个顶点的出度和入度
void calc_in_out_degree(Graph *graph, int out_degree[], int in_degree[]) {
for (int i = 0; i < graph->num_vertices; i++) {
out_degree[i] = 0;
in_degree[i] = 0;
}
for (int i = 0; i < graph->num_vertices; i++) {
EdgeNode *p = graph->adj_list[i].first_edge;
while (p != NULL) {
out_degree[i]++;
in_degree[p->adjvex]++;
p = p->next;
}
}
}
// 主函数
int main() {
int num_vertices = 6;
Graph graph;
init_graph(&graph, num_vertices);
add_directed_edge(&graph, 0, 1);
add_directed_edge(&graph, 0, 2);
add_directed_edge(&graph, 1, 2);
add_directed_edge(&graph, 2, 3);
add_directed_edge(&graph, 3, 1);
add_directed_edge(&graph, 3, 4);
add_directed_edge(&graph, 4, 0);
add_directed_edge(&graph, 4, 5);
int out_degree[num_vertices];
int in_degree[num_vertices];
calc_in_out_degree(&graph, out_degree, in_degree);
printf("顶点\t出度\t入度\n");
for (int i = 0; i < num_vertices; i++) {
printf("%d\t%d\t%d\n", i, out_degree[i], in_degree[i]);
}
return 0;
}
```
这段代码创建了一个有向图,然后计算了每个顶点的出度和入度,并输出结果。你可以根据需要修改图的结构和数据,以适应你的实际需求。