posted @ 2011-02-18 15:46 huhuuu 阅读(289) 评论(0) 推荐(0) 编辑
posted @ 2011-02-18 15:28 huhuuu 阅读(320) 评论(0) 推荐(0) 编辑
|
|||
摘要:
求最小树,map[][]初始都为MAX求最大树,map[][]初始都为0,prim函数再改下就ok了判断全树是通过判断顶点是否都遍历了,即use[]1到n是否都为1View Code 阅读全文
posted @ 2011-02-18 14:29 huhuuu 阅读(284) 评论(0) 推荐(0) 编辑
摘要:
回过头来看看,与最小生成树PRIM算法太像太像……反正用dijk自己要随时注意重边的情况……View Code 阅读全文
posted @ 2011-02-18 13:49 huhuuu 阅读(720) 评论(0) 推荐(0) 编辑
摘要:
//printf("%.2lf\n",sqrt((double)a[s]));//以后用sqrt自己小心点,而且要用c++提交//郁闷到了没加double就一直错,不说了,而且g++提交也一直错,c++提交才对下次看到题目有说用sqrt的时候要小心了,因为精度而产生的问题是比较郁闷的ps:用vs2008它会会提示sqrt重载问题……以后有关精度问题时先在vs上运行试试……View Code 阅读全文
posted @ 2011-02-17 21:20 huhuuu 阅读(275) 评论(0) 推荐(0) 编辑
摘要:
正反两次遍历最小生成树,把结果顶点的连通性结果分别放在hash[][],hash2[][]里,在比较若相同,则树唯一,反之不唯一View Code 阅读全文
posted @ 2011-02-16 22:33 huhuuu 阅读(552) 评论(0) 推荐(0) 编辑
摘要:
用枚举算法做,思想还是比较简单的:(比较朴素的思想,没优化过)1、一共找n-1条边形成最小生成树{2、枚举i寻找第i条边是遍历过的点3、枚举j寻找第j条没被遍历过的点在枚举符合条件【i,j】的同时找出最短的边}//一共枚举了n-1,然后最小生成树就诞生了……时间复杂度是(顶点^3)PRIM思想:FOR()一点为起点,与所有点连线,距离保存在dis[]里,起点标记for(i->(n-1)) 一共连n-1条边{ FOR()//找dis[]最短的边 保存距离,标记 FOR()//更新没被标记的最短边,注意与最短路不同,dis[i]是保存到i的最短边,而最短路中 阅读全文
posted @ 2011-02-16 21:19 huhuuu 阅读(1655) 评论(0) 推荐(0) 编辑
摘要:
差不多最短路的题目做的差不多了主要三种算法:1、FLOYD:个人比较喜欢使用,不但可以快速计算计算多源最短路,也可以判断图的连通性。时间复杂度是(顶点^3)2、DIJK:从点的角度计算单源最短路比较方便吧,可以用邻接表优化(没用过,呵呵)。时间复杂度(顶点^2(朴素),顶点*log(顶点))3、SPFA+静态邻接表+队列储存:是从边的角度计算单源最短路,比较牛逼的算法,因为时间复杂度比较小(边*k),其中K是常数,注意用前两种算法时,因为这两种算法是从顶点思考,所以要小心重边的情况(有时题目没说明但自己要小心),每次读取边取小即可,用SPFA就没关系了网上说K~2,不过实际使用时K估计接近10 阅读全文
posted @ 2011-02-16 18:12 huhuuu 阅读(2450) 评论(2) 推荐(1) 编辑 |
|||