图的四种存储C++实现

#include <bits/stdc++.h>
#include <iostream>
using namespace std;

#define MaxVertexNum 100 //最大定点数

// 邻接矩阵法
typedef char VertexType;  // 定义点对应的数据类型
typedef int EdgeType;     // 定义边对应的数据类型

typedef struct MGraph {
    VertexType ver[MaxVertexNum];               // 记录点
    EdgeType edge[MaxVertexNum][MaxVertexNum];  // 邻接矩阵
    int vernum, edgenum;                        // 记录点和边的数量
} MGraph;

// 邻接表法
typedef struct ENode1 {
    int place;             // 边连接的另一个点的数组位置
    struct ENode1* enode;  // 另一个链接的结点
} ENode1;

typedef struct VNode1 {
    VertexType data;  // 点的数据类型
    ENode1* forenode; // 第一个链接的点
} VNode1, VList1[MaxVertexNum];

typedef struct ALGraph {
    VList1 vlist;      // 邻接表
    int vernum, edgenum;  // 边数和点数
} ALGraph;

// 十字链表法
typedef struct ENode2 {
    int tailvex, headvex;         // 弧尾和弧头的点位置
    struct ENode2* SameTail, *SameHead;  // 相同弧尾或弧头的下一条边。
    int edge_info;                // 边上的存储信息
} ENode2;

typedef struct VNode2 {
    VertexType data;
    ENode2* Tail, *Head;  // 相连的弧尾或弧头的第一条边。
} VList2[MaxVertexNum];

typedef struct TGraph {
    VList2 vlist;
    int vernum, edgenum;
} TGraph;

// 邻接多重表
typedef struct ENode3 {
    int anode, bnode;         // 一条边两端的A点,B点
    struct ENode3* aedge, *bedge;  // 与A点链接的下一条边,与B……
    int info;                 // 边的信息
} ENode3;

typedef struct VNode3 {
    VertexType data;
    ENode3* enode;  // 与点链接的第一条边
} VNode3, VList3[MaxVertexNum];

typedef struct DGraph {
    VList3 vlist;
    int vernum, edgenum;
} DGraph;

int main() {
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值