存图的方法
结构体
代码
struct
{
int a,b,w; //a为起点,b为终点,w为边权
}edge[M];
优点:
- 结构体可以灵活地定义每个节点的附加信息,例如权值、坐标等;
- 可以方便地遍历所有的边或节点;
缺点:
- 不利于图的迭代修改,因为很难动态地调整结构体中节点的顺序;
- 遍历某些节点的出边或入边会相对困难。
邻接表
代码
int e[N], ne[N], idx, h[N], w[N];
void add(int a,int b, int c)
{
e[idx] = b,ne[idx] = h[a] , w[idx] = c, h[a] = idx++;
}
优点:
- 占用空间较小,只需存储每个节点与其出边或入边的关系;
- 方便存取和添加边。而且可以动态调整图的大小;
- 适用于存储稀疏图,因为只需存储每个节点的相邻节点即可。
缺点:
- 访问某个节点
的相邻节点比较耗时,在存在大量出度非常高的情况下,时间复杂度可能达到 , 为边数; - 在计算稠密图中的某些算法时,跟邻接矩阵比较,速度慢。
邻接矩阵
代码
int g[N][N]; //g[a][b] = w 中 a 为起点 b 为终点 w 为边权
优点:
- 快速访问节点
和 之间是否存在一条边,并可以快速获取两个节点之间的权重; - 在邻接矩阵中查找某个节点的相邻节点非常容易,
即可完成; - 适用于存储稠密图,因为可以快速访问任意两个节点之间的距离。
缺点:
- 占用空间比较大,当图较稀疏时浪费空间;
- 在计算稀疏图中的某些算法时,跟邻接表比较,速度慢。
综上所述,不同的存储方式适合不同的场景,如何选择要根据实际情况来判断。如果希望得到更快的遍历和存取性能,则应该使用邻接矩阵;如果希望节省空间,则应该使用邻接表;如果需要存储节点的附加信息或遍历所有边,则应该使用结构体。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App