图
iteye_8466
这个作者很懒,什么都没留下…
展开
-
图的概义及存储方法
[color=blue]一、概念。[/color]图: 是一种复杂的非线性数据结构。图的二元组定义:图G由两个集合V和E组成,记为: G=(V, E) 其中: V 是顶点的有穷非空集合, E是V中顶点偶对(称为边)的有穷集。 通常,也将图G的顶点集和边集分别记为V(G)和E(G) 。 E(G)可以是空集。若E(G)为空,则图G只有顶点而没有边。有向图...原创 2012-08-26 07:12:28 · 102 阅读 · 0 评论 -
Bellman-Ford算法教学PPT
Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的。这时候,就需要使用其他的算法来求解最短路径,Bellman-Ford算法就是其中最常用的一个。Bellman-Ford算法的流程如下: 给定图G(V, E)(其中V、E分别为图G的顶点集与边集),源点s,Bellm...原创 2012-11-03 12:06:40 · 204 阅读 · 0 评论 -
图解Bellman-Ford算法
Bellman-Ford算法: 为了能够求解边上带有负值的单源最短路径问题,Bellman(贝尔曼)和Ford(福特)提出了从源点逐次绕过其他顶点,以缩短到达终点的最短路径长度的方法。[img]http://dl.iteye.com/upload/attachment/0076/0621/e2977195-d3bb-34bb-b4aa-168452a7ff26.gif[/i...原创 2012-11-03 19:39:20 · 283 阅读 · 0 评论 -
SPFA算法求单源最短路径
很多时候,给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。简洁起见,我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路。 我们用数组dist记录每个结点的最短路径估计值,而且用邻接表(或邻接矩阵)来存储图G。采取的方法是动...原创 2012-11-04 23:00:00 · 143 阅读 · 0 评论 -
Dijkstra算法解HDU1874
Dijkstra算法是用来解决:确定起点的最短路径问题:即已知起始结点,求最短路径的问题。 它是常用的最短路径算法之一。最常用的路径算法有:Dijkstra算法、A*算法、Bellman-Ford算法、Floyd-Warshall算法、Johnson算法。 缺陷:它一般用来解决正权,单源路径的最短路问题。 Dijkstra算法思想:设G=(V,E)是一个带权有向图,把图中...原创 2012-11-05 10:15:42 · 91 阅读 · 0 评论 -
三种算法(Floyd、Dijkstra、SPFA)求单源点最短路径。
题(HDU2544): 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据。每组数据第一行是两个整数N、M(N...原创 2012-11-05 13:15:01 · 90 阅读 · 0 评论 -
深度优先搜索输出有向图中的所有环(JAVA)
如图:求出有向图的所有环。[img]http://dl.iteye.com/upload/attachment/0076/2311/5f987942-21b0-33b0-b0df-e9b62b9d7c65.gif[/img][code="java"]import java.util.ArrayList;import java.util.Arrays;public class T...原创 2012-11-06 14:22:52 · 3727 阅读 · 0 评论 -
如何求无向图的最小环
POJ1734题意:给定一个N个点的无向图,求一个最小环(各边权值和最小的环)并输出路径。[img]http://dl.iteye.com/upload/attachment/0076/5420/aa938234-320b-323c-b51b-bb53936f3bed.gif[/img]样例:Sample Input5 7 (图有五个点,七条边)1 4 1 (...原创 2012-11-13 19:02:42 · 206 阅读 · 0 评论 -
邻接矩阵实现图的广搜和深搜(java模板)
经常要用到,放到这里备用!![code="java"]//邻接矩阵实现图的广搜和深搜import java.util.*;public class Graph { private int[][] G;//邻接矩阵 private int k;//顶点数目 private boolean[] visited;//判断顶点是否被访问过 publi...原创 2012-12-10 20:37:45 · 162 阅读 · 0 评论 -
邻接表实现图的广搜和深搜(java模板)
//邻接表实现图的广搜和深搜(java模板) [code="java"]import java.util.*;public class GraphSearch{ private int n; //图的顶点数,顶点为0,1,2,,,,n-1 private List G;// 邻接表实现图。 private boolean[] ...原创 2012-12-11 17:04:32 · 220 阅读 · 0 评论 -
图的练习题(有解答)
1. 填空题 ⑴ 设无向图G中顶点数为n,则图G至少有( )条边,至多有( )条边;若G为有向图,则至少有( )条边,至多有()条边。【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。⑵ 任何连通图的连通分量只有一个,即是( )。【解答】其自身⑶ 图的存...原创 2012-12-27 22:23:34 · 1827 阅读 · 1 评论 -
昆虫的同性恋
题目大意: 输入一个数t,表示测试组数。然后每组第一行两个数字n,m,n表示有n只昆虫, 编号从1—n,m表示下面要输入m行交配情况,每行两个整数,表示这两个编号的昆虫为异性,要交配。 要求统计交配过程中是否出现冲突,即是否有两个同性的昆虫发生交配。[输入输出]: [样例]: Sample Input2 (二次测试)3 3(三条虫子,三对信息)1 22 31...2012-11-01 19:21:54 · 171 阅读 · 0 评论 -
拓扑排序入门练习
拓扑排序简单来说就是把一个图的所有节点排序,使得每一条有向边(u,v)对应的u都排在v的前面。 拓扑排序最大的用途就是判断一个有向图是否有环。无前趋的顶点优先的拓扑排序方法 该方法的每一步总是输出当前无前趋(即人度为零)的顶点,其抽象算法可描述为: NonPreFirstTopSort(G){//优先输出无前趋的顶点 while(图G中有人...2012-11-01 16:51:14 · 108 阅读 · 0 评论 -
并查集入门精讲,实例2个(JAVA)
一、什么是并查集 并查集:即不相交集合。一种简单的用途广泛的集合,实现了较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现Kruskar算法求最小生成树。并查集实现方法: 每个集合用一棵“有根树”表示; 定义数组 int[] father int[] rank father[i...2012-10-30 14:47:54 · 133 阅读 · 0 评论 -
图的邻接矩阵实现及深度优先搜索(JAVA)
[img]http://dl.iteye.com/upload/attachment/0072/8819/2c6e4927-0f08-3e44-86af-46ebdefe85dd.gif[/img]遍历,直到图中所有顶点都被访问到为止。[code="java"]import java.util.Stack;// 图的邻接矩阵实现及深度优先搜索图dfs.java//顶点类clas...原创 2012-08-26 07:23:50 · 127 阅读 · 0 评论 -
图的邻接矩阵实现及广度优先搜索(JAVA)
[img]http://dl.iteye.com/upload/attachment/0072/8821/3b1e5bfd-3c81-3153-9f2c-9cdcfc595cce.gif[/img][code="java"]import java.util.Queue;import java.util.ArrayDeque;// 顶点类 class Vertex...原创 2012-08-26 14:09:10 · 154 阅读 · 0 评论 -
最小生成树:Prim算法(两种方法)(java)
[img]http://dl.iteye.com/upload/attachment/0073/0811/1d623560-baf1-3137-9a07-3f84f61e8c74.jpg[/img] [code="java"]import java.util.Scanner;方法一:时间复杂度O(n^3)class Edge { /** * 边的起点 ...原创 2012-08-30 16:12:11 · 330 阅读 · 0 评论 -
最小生成树:Kruskal(克鲁斯卡尔)算法实现(java)
算法描述:Kruskal(克鲁斯卡尔)算法需要对图的边进行访问,所以克鲁斯卡尔算法的时间复杂度只和边又关系。算法过程:1.将图各边按照权值进行排序2.将图遍历一次,找出权值最小的边,(条件:此次找出的边不能和已加入最小生成树集合的边构成环),若符合条件,则加入最小生成树的集合中。不符合条件则继续遍历图,寻找下一个最小权值的边。3.递归重复步骤1,直到找出n-1条边为...原创 2012-09-01 20:50:39 · 253 阅读 · 0 评论 -
深度优先搜索与有向无环图的拓扑排序(java实现)
当每个任务有前后置关系时,需要找到一种满足前后置关系的路线,将任务完成。如果将每个任务看成一个节点,任务之间的前后置关系表示为有向图时,这种路线顺序叫做为图进行拓扑排序。也叫关键路径分析。比如有很多任务T1,T2,.... 这些任务又是相互关联的,比如Tj完成前必须要求Ti已完成,这样T1,T2....序列关于这样的先决条件构成一个图,其中如果Ti必须要先于Tj完成...原创 2012-09-11 13:05:30 · 588 阅读 · 0 评论 -
单源最短路径( Dijkstra算法)JAVA实现
单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。在弄清楚如何求算单源最短路径问题之前,必须弄清楚最短路径的最优子结构性质。一.最短路径的最优子结构性质 该性质描述为:如果P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,k和s是这条路径上的中间顶点,那么P(k,s)必定是从k到s的最短路径。下面证明该性质的正确性。...原创 2012-09-14 14:30:12 · 473 阅读 · 0 评论 -
弗洛伊德(Floyd)算法求任意两点间的最短路径
Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理带权有向图或负权的最短路径问题 解决此问题有两种方法:其一是分别以图中每个顶点为源点共调用n次Dijkstra[url]http://128kj.iteye.com/blog/1678532[/url]算法;其二是采用Floyd算法。两种算法的...原创 2012-10-01 07:46:37 · 813 阅读 · 0 评论 -
图的邻接表存储及遍历(JAVA)
为图的每个顶点所发出的边建立一个单链表,用一顶点数组存储每个单链表的头指针。[img]http://dl.iteye.com/upload/attachment/0074/7828/27d47812-8e3c-3592-b73c-fa1372131fcb.gif[/img][img]http://dl.iteye.com/upload/attachment/0074/7830/c...原创 2012-10-10 10:58:25 · 248 阅读 · 0 评论 -
Kruskal算法和prim算法求最小生成树学习小结(JAVA)
prim算法是用来实现图最小生成树的2种常用方法之一,Prim算法的主要步骤如下: 1.设图的顶点集为V,首先选取一个点作为起始点,比如说1顶点,加入到U集合中 2.在所有u∈U,v∈V-U的边(u,v)∈E中,找一条权最小的边(u,v),将此边加进集合T中,并将此边的非U中顶点加入U中。此步骤的功能是在边集E中找一条边,要求这条边满足以下条件:首先边的两个顶点...原创 2012-10-26 14:02:29 · 422 阅读 · 0 评论 -
无前趋的顶点优先的拓扑排序方法(JAVA)
无前趋的顶点优先的拓扑排序方法 该方法的每一步总是输出当前无前趋(即人度为零)的顶点,其抽象算法可描述为: NonPreFirstTopSort(G){//优先输出无前趋的顶点 while(G中有人度为0的顶点)do{ 从G中选择一个人度为0的顶点v且输出之; 从G中删去v及其所有出边; } if(...原创 2012-10-28 20:20:20 · 159 阅读 · 0 评论 -
图的深搜+回溯练习题:POJ2197
POJ 2197题意: 给定n个城市及其之间的距离,以及距离限制len 初始点s, 结束点e,要求求出从s到e的所有不大于len的路径并输出,按照距离从小到大输出,如果距离相等,就按照路径的字典升序输出。样例:Sample Input4 5 4个顶点,5条边1 2 2 顶点1到2之间的距离为21 3 31 4 12 3 2...2013-01-18 15:53:14 · 139 阅读 · 0 评论