图:图是由顶点集合V和顶点间的关系集合E(边的集合)组成的一种数据结构,可以用二元组定义为G=(V,E)。
有向图:如果用箭头标明了边是有方向性的,则这样的图称为有向图。
弧:有向边也称为弧。<x,y>表示从顶点x发向顶点y的边。
权:在图的边或弧中给出相关的数,称为权。权可以代表一个顶点到另一个顶点的距离,费用等,带权图一般称为网。
下面是一个示例的有向权图:
这是有向权图的顶点存储数组和邻接矩阵:
下面是C语言的代码,把这个有向权图存储了起来:
#include <stdio.h> #define N 5 // 图中的顶点数 #define E 9 // 图中的边数 struct graph { int V[N]; // 存放顶点的信息 int arcs[N][N]; // 邻接矩阵 }; void main() { int i, j; struct graph g = { { 0, 1, 2, 3, 4 }, { 0 } }; // 初始化所有顶点之间都没有弧,权都为-1 for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { if(i != j) { g.arcs[i][j] = -1; } } } // 存储图中的9条边 g.arcs[0][1] = 3; g.arcs[0][4] = 5; g.arcs[1][2] = 25; g.arcs[1][3] = 8; g.arcs[2][4] = 10; g.arcs[3][0] = 20; g.arcs[3][2] = 4; g.arcs[3][4] = 12; g.arcs[4][0] = 30; // 输出矩阵 for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { printf("%d\t", g.arcs[i][j]); } printf("\n"); } }