#include <stdio.h> #include <stdlib.h>

#define MaxVertexNum 100 // 最大顶点数

// 存储结构定义 typedef struct { int vertex[MaxVertexNum]; // 顶点数组 int edge[MaxVertexNum][MaxVertexNum]; // 邻接矩阵 int num_vertex; // 顶点数 int num_edge; // 边数 } Graph;

// 初始化图 void InitGraph(Graph *G) { int i, j; G->num_vertex = 0; G->num_edge = 0; for (i = 0; i < MaxVertexNum; i++) { G->vertex[i] = 0; for (j = 0; j < MaxVertexNum; j++) { G->edge[i][j] = 0; } } }

// 添加顶点 void AddVertex(Graph *G, int v) { G->vertex[G->num_vertex++] = v; }

// 添加边 void AddEdge(Graph *G, int v1, int v2, int w) { int i, j; // 查找顶点对应的下标 for (i = 0; i < G->num_vertex; i++) { if (G->vertex[i] == v1) break; } for (j = 0; j < G->num_vertex; j++) { if (G->vertex[j] == v2) break; } // 添加边 G->edge[i][j] = w; G->num_edge++; }

// 输出图 void PrintGraph(Graph *G) { int i, j; printf("顶点:"); for (i = 0; i < G->num_vertex; i++) { printf("%d ", G->vertex[i]); } printf("\n"); printf("边:\n"); for (i = 0; i < G->num_vertex; i++) { for (j = 0; j < G->num_vertex; j++) { if (G->edge[i][j] != 0) { printf("%d -> %d : %d\n", G->vertex[i], G->vertex[j], G->edge[i][j]); } } } }

int main() { Graph G; int i, v1, v2, w; InitGraph(&G); printf("请输入顶点数:"); scanf("%d", &G.num_vertex); printf("请输入顶点:"); for (i = 0; i < G.num_vertex; i++) { scanf("%d", &G.vertex[i]); } printf("请输入边数:"); scanf("%d", &G.num_edge); printf("请输入边(格式:起点 终点 权重):\n"); for (i = 0; i < G.num_edge; i++) { scanf("%d %d %d", &v1, &v2, &w); AddEdge(&G, v1, v2, w); } PrintGraph(&G); return 0;

1.图的建立及输出任务:建立图的存储结构图的类型可以是有向图、无向图、有向网、无向网能够输入图的顶点和边的信息并存储到相应存储结构中然后输出图的相关信息。用c语言给出代码

原文地址: https://www.cveoy.top/t/topic/fQ1P 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录