用c语言以邻接矩阵形式创建一个无向图并 以邻接表的形式创建一个无向图。
时间: 2024-05-16 12:18:01 浏览: 110
c语言 用邻接矩阵构造图,输出对应的邻接表
4星 · 用户满意度95%
创建无向图邻接矩阵的C语言代码:
```c
#include <stdio.h>
#define MAXV 100 // 最大顶点数
typedef struct {
int matrix[MAXV][MAXV]; // 邻接矩阵
int num_v; // 顶点数
} Graph;
void init(Graph *G, int num_v) {
G->num_v = num_v;
for (int i = 0; i < num_v; i++) {
for (int j = 0; j < num_v; j++) {
G->matrix[i][j] = 0; // 初始化为0
}
}
}
void addEdge(Graph *G, int u, int v) {
G->matrix[u][v] = 1;
G->matrix[v][u] = 1; // 无向图,所以需要反向再赋值一次
}
void printGraph(Graph *G) {
for (int i = 0; i < G->num_v; i++) {
printf("%d: ", i);
for (int j = 0; j < G->num_v; j++) {
if (G->matrix[i][j]) {
printf("%d ", j);
}
}
printf("\n");
}
}
int main() {
Graph G;
int num_v = 5;
init(&G, num_v);
addEdge(&G, 0, 1);
addEdge(&G, 0, 4);
addEdge(&G, 1, 2);
addEdge(&G, 1, 3);
addEdge(&G, 1, 4);
addEdge(&G, 2, 3);
addEdge(&G, 3, 4);
printGraph(&G);
return 0;
}
```
创建无向图邻接表的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int v; // 该边所连向的顶点
struct node *next; // 指向下一条边的指针
} EdgeNode;
typedef struct vnode {
int data; // 顶点信息
EdgeNode *first_edge; // 指向第一条依附于该顶点的边的指针
} VertexNode;
typedef struct {
VertexNode adj_list[100]; // 邻接表,最多100个顶点
int num_v, num_e; // 顶点数和边数
} Graph;
void init(Graph *G, int num_v) {
G->num_v = num_v;
G->num_e = 0;
for (int i = 0; i < num_v; i++) {
G->adj_list[i].data = i;
G->adj_list[i].first_edge = NULL;
}
}
void addEdge(Graph *G, int u, int v) {
EdgeNode *e = (EdgeNode *) malloc(sizeof(EdgeNode));
e->v = v;
e->next = G->adj_list[u].first_edge;
G->adj_list[u].first_edge = e;
e = (EdgeNode *) malloc(sizeof(EdgeNode));
e->v = u;
e->next = G->adj_list[v].first_edge;
G->adj_list[v].first_edge = e;
G->num_e++;
}
void printGraph(Graph *G) {
for (int i = 0; i < G->num_v; i++) {
printf("%d: ", G->adj_list[i].data);
EdgeNode *e = G->adj_list[i].first_edge;
while (e != NULL) {
printf("%d ", e->v);
e = e->next;
}
printf("\n");
}
}
int main() {
Graph G;
int num_v = 5;
init(&G, num_v);
addEdge(&G, 0, 1);
addEdge(&G, 0, 4);
addEdge(&G, 1, 2);
addEdge(&G, 1, 3);
addEdge(&G, 1, 4);
addEdge(&G, 2, 3);
addEdge(&G, 3, 4);
printGraph(&G);
return 0;
}
```
阅读全文