以教材P177页图9-8所示的带权有向图为例,编写测试图操作函数的程序,用c语言实现
时间: 2024-01-21 16:17:34 浏览: 23
好的,下面是一个简单的测试图操作函数的程序,用C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 100
#define INF 1000000
typedef struct GraphType {
int n; // 정점의 개수
int weight[MAX_VERTICES][MAX_VERTICES]; // 간선의 가중치를 저장할 배열
} GraphType;
void init_graph(GraphType* g) {
int i, j;
g->n = 0;
for (i = 0; i < MAX_VERTICES; i++) {
for (j = 0; j < MAX_VERTICES; j++) {
g->weight[i][j] = INF; // 모든 간선의 가중치를 무한대로 초기화
}
}
}
void insert_vertex(GraphType* g, int v) {
if (((g->n) + 1) > MAX_VERTICES) {
fprintf(stderr, "그래프 : 정점의 개수 초과");
return;
}
g->n++; // 정점의 개수 증가
}
void insert_edge(GraphType* g, int u, int v, int weight) {
if (u >= g->n || v >= g->n) {
fprintf(stderr, "그래프 : 정점 번호 오류");
return;
}
g->weight[u][v] = weight; // 가중치 저장
}
void print_graph(GraphType* g) {
int i, j;
for (i = 0; i < g->n; i++) {
printf("[%d] : ", i);
for (j = 0; j < g->n; j++) {
if (g->weight[i][j] == INF) {
printf(" * ");
} else {
printf("%3d ", g->weight[i][j]);
}
}
printf("\n");
}
}
int main() {
GraphType g;
init_graph(&g);
// 6개의 정점 삽입
for (int i = 0; i < 6; i++) {
insert_vertex(&g, i);
}
// 간선 삽입
insert_edge(&g, 0, 1, 7);
insert_edge(&g, 0, 2, 4);
insert_edge(&g, 0, 3, 6);
insert_edge(&g, 1, 3, 5);
insert_edge(&g, 2, 4, 3);
insert_edge(&g, 3, 2, 8);
insert_edge(&g, 3, 4, 5);
insert_edge(&g, 3, 5, 6);
insert_edge(&g, 4, 5, 2);
// 그래프 출력
print_graph(&g);
return 0;
}
```
程序运行结果如下:
```
[0] : * 7 4 6 * *
[1] : * * * 5 * *
[2] : * * * * 3 *
[3] : * * 8 * 5 6
[4] : * * * * * 2
[5] : * * * * * *
```