图结构里判断两点是否有边,其实也就两种主流思路,邻接矩阵和邻接表。如果你用的是邻接矩阵,那判断逻辑挺直接的,看a[i][j]
是不是等于NoEdge
就行。代码写起来也简洁,响应快,尤其适合稠密图的场景。
要是用邻接表,那就稍微麻烦点,但也不复杂。遍历i
号顶点的链表,找找有没有j
,有就是有边。链表查找这块得注意边界问题,别越界了,系统可不答应。
添加边操作就更常用了。矩阵结构里,改a[i][j]
的值,加权图就直接赋个权重,简单粗暴。如果是无向图,记得顺带改下a[j][i]
。邻接表就要在对应链表里加个结点,操作也不难,主要是清晰。
顺手推荐几个资源,还不错:
- 图的存储结构邻接矩阵优化方案,对大图优化挺有参考价值的
- 加权有向图 G 及其邻接矩阵 W 的离散模型,配合理论使用更稳
- Polbooks_A.mat Matlab 数据集邻接矩阵,可以直接上手跑图算法
如果你正好在写图结构相关的工具类,建议把这两套逻辑都封装好,调用时判断存储类型自动切换,体验会更顺滑。