【数据结构:C语言版】008:图(Graph)数据结构详解-概念、类型、实现与应用

1. 图的基本概念

        图是一种非线性数据结构,由顶点(Vertex)的集合和连接这些顶点的边(Edge)的集合组成。formally表示为G = (V, E),其中V是顶点集合,E是边集合。

        图可以用来表示很多现实世界中的关系,比如社交网络、地图路线、网络拓扑等。

1.1 基本术语

  • 顶点(Vertex):图中的基本单元,也称为节点。
  • 边(Edge):连接两个顶点的线段。
  • 度(Degree):与某个顶点相连的边的数量。
  • 路径(Path):从一个顶点到另一个顶点的顶点序列。
  • 环(Cycle):起点和终点相同的路径。

2. 图的类型

2.1 有向图与无向图

  • 无向图:边没有方向,$(v,w)$和$(w,v)$表示同一条边。
  • 有向图:边有方向,$(v,w)$和$(w,v)$是不同的边。

2.2 加权图与非加权图

  • 非加权图:边没有与之关联的权值。
  • 加权图:每条边都有一个权值,表示某种成本或距离。

2.3 其他类型

  • 完全图:每个顶点都与其他所有顶点相连。
  • 连通图:任意两个顶点之间都存在路径。
  • 二分图:顶点可以分为两个不相交的集合,每条边连接的两个顶点分别属于这两个集合。

3. 图的表示方法

3.1 邻接矩阵

使用一个二维数组来表示图,如果顶点i和j之间有边,则matrix[i][j] = 1(或权值),否则为0。

#define MAX_VERTICES 100

int adjMatrix[MAX_VERTICES][MAX_VERTICES];

// 初始化图
void initGraph(int vertices) {
    for (int i = 0; i < vertices; i++)
        for (int j = 0; j < vertices; j++)
            adjMatrix[i][j] = 0;
}

// 添加边
void addEdge(int start, int end) {
    adjMatrix[start][end] = 1;
    adjMatrix[end][start] = 1;  // 对于无向图
}

// 打印图
void printGraph(int vertices) {
    for (int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值