老师,邻接表不考虑边的重复添加嘛

来源:7-2 图的表示

AlbertRui

2018-03-25

老师,邻接表不考虑边的重复添加嘛,为什么不判断一下,就m++了

写回答

1回答

liuyubobobo

2018-03-26

是的哦,在这个课程中的代码,相当于是允许邻接表有重边的。只不过我们后续算法的测试用例中,将不存在有重边的测试用例:)


如果一定要排除邻接表的重边,可以在addEdge的时候,添加一定的逻辑,进行查重处理。不过对于vector<vector<int>>的设计,对于每个点的邻边,在vector中进行查重是O(n)的复杂度,比较耗时。如果需要处理这种情况,应该将邻接表声明成vector<unordered_map<int, int>>的方式,这样,每次查重工作是O(1)的时间复杂度。对于相应的可能产生的更多问题,已经超出这个课程的范畴了。我有机会一定出一门专门的图论算法课程,给大家系统加讲讲图论这个领域:)


另外,这个课程的代码中,邻接矩阵和邻接表的实现,也是允许自环边的哦。不过按照这个课程的代码,无向图的邻接矩阵的实现不支持重边。如果需要在邻接矩阵中支持重边,就应该使用vector<vector<int>>代替vector<vector<bool>>,其中g[i][j]是一个整数,表示从i到j之间的边数:)


1
1
AlbertRui
谢谢老师!
2018-03-26
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程