1 给定一个图,这个图不一定是连通的,统计连通图的个数的做法:
A 深度搜索 遍历每一个节点,注意要设置一个标志数组,将已经遍历过的节点做标记,防止同一个连通图中的节点被多次访问
B 并查集 遍历每一条边,最后统计father数组中有几个不同father 这个工作最早可以在录入边时就完成
2 N个节点有N-1条边,如果这个图是连通的,那么就一定是棵树
一个树,求使其树高达到最大的根节点(可能有多个),有一个作为定理的做法:
先选择任意一个节点,从该节点开始遍历整棵树,获取能达到的最深的顶点,记为节点集合A;然后从A中任意一个结点出发遍历整棵树,获取能达到的最深节点,记为节点集合B;集合A与集合B的并集即为所求。
3 有的题中要建立名称(字符串)和编号(整型)之间的映射,用两个数组分别来做,stringtoint和inttostring,如果有排序要求当然也可以用map,string类型可以直接进行比较,无需重载运算符
4 深度搜索时经常要处理这么几个问题:
A 确保一个节点不会被多次遍历,通常是设置vis数组
B 如果在遍历过程中要对边进行一些操作,确保不会有漏掉的边,为此可以先对边操作再处理递归节点的问题;同时也要确保不会重复操作,为此可以在处理完一条边之后将边删除