12 2011 档案

摘要:在图的应用中,有一个很重要的需求:我们需要知道从某一个点开始,到其他所有点的最短路径。这其中,Dijkstra算法是典型的最短路径算法。它的关键思想是以起始点为中心,向外一层层扩散,直到扩展到终点为止。Dijkstra算法能够得出最短路径的最优解,不过它需要遍历计算的节点相当多,所以效率不高。首先,用最通俗的语言解释。假定有3个顶点,A、B、C,如图:要求A到其余各点的最短路径。很明显,A到C比A到B更短。有疑惑的是从A->B的最短距离,要么是直接A->B的边,要么是A经过C到B的边更短。我们首先找到最短的边(A->C),然后在此基础上扩展,于其余边去对比找到最小值。顶点再进 阅读全文
posted @ 2011-12-29 22:12 SadGeminids 阅读(6458) 评论(0) 推荐(1)
摘要:很抱歉,换电脑后,原文件找不到了。现在的文件已经被我改得面目全非了。所以只好从新浪博客拷贝过来,格式惨不忍睹,让我蛋疼。但我实在是懒得去调整,将就一下吧。这次发图的另一种实现,基于十字链表的c++实现。就像上一章说的,十字链表是综合了邻接表和逆邻接表的构成,所以,代码需要修改的地方并不是很多。重要的是,修改算法的实现以提高效率。代码中有两种搜索顶点的实现方式。一种是最原始的,另一种是排序后使用2分搜索。数据量巨大的时候,使用后一种能节省大量的时间。整个过程中有几个比较需要注意的地方:1.析构函数中,顶点释放时,开始错误地先删邻接表,后删逆邻接表。程序运行完毕,调用到析构函数的时候崩掉,才反.. 阅读全文
posted @ 2011-12-23 12:13 SadGeminids 阅读(1310) 评论(0) 推荐(0)