图的定义和建立的简单使用
图就是多对多的关系,每个结点都可能与多个结点有关系,结点之间的关系是任意的,图中任意两个结点都可以相关,所以图的应用极其广泛,
而研究某一个结构上面的操作,就先要让他可以在计算机中表示,即怎么存储他,由于图的结构比较复杂,任意两个结点之间都可能存在关系,
所以无法使用物理位置来表示元素之间的关系,所以一般使用二维数组来表示图之间的关系,即邻接矩阵法,另外图中任意两个结点之间都可能存在关系,所以也可以使用链式存储,
1.邻接矩阵法表示图
#include<stdio.h> #include<stdlib.h> #define Maxsize 100 typedef struct { int vex[Maxsize]; int arcs[Maxsize][Maxsize]; int vexnum; int arcsnum; }Graph;
2.邻接表表示图
#include<stdio.h> #include<stdlib.h> #define Maxsize 100 typedef struct ArcNode { int adjvex; struct ArcNode* nextarc; }ArcNode; typedef struct { int data; ArcNode* next; }VNode; typedef struct { VNode vertices[Maxsize]; int vexnum, arcnum; };
3.使用邻接矩阵创建图
void createGraph(Graph* G) { scanf("%d,%d", &G->vexnum, &G->arcsnum); for (int i = 0; i < G->vexnum; i++) { int e = 0; scanf("%d", e); G->vex[i] = e; } for (int i = 0; i < G->vexnum; i++) { for (int j = 0; j < G->vexnum; j++) { G->arcsnum[i][j] = 0; } } for (int i = 0; i < G->arcsnum; i++) { int a, b, c = 0; scanf("%d,%d,%d", &a. & b, &c); G->arcs[a][b] = c; } }
好了,我们下回见,peace

浙公网安备 33010602011771号