- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
图论及相关竞赛题讲解
图的数据结构图G=(V,E)点集V边集E,边(u,v)权集W,边(u,v)有权w邻接矩阵表示邻接表表示
图的数据结构邻接矩阵邻接表101234555468387208∞43∞0∞∞8670102∞∞∞0∞55∞∞012345285348581641027521525
AB根据具体情况选择合适的方法可以用DFS或BFS图的遍历
最短路径Dijkstra算法:设G=V,E,W是个赋权图。求一结点a到其他结点x的最短路径长度。步骤:(1)把V分成两个子集S和T。初始时,S={a},T=V-S。(2)对T中每一元素t计算D(t),根据D(t)值找出T中距a最短的一结点x,写出a到x的最短路径长度D(x)。(3)置S为S∪{x},置T为T-{x},若T=Φ,则停止,否则再重复2算法是基于“最短路径的任一段子路径都是最短路径”这一事实
Dijkstra算法实例步骤SxD(x)D(v1)D(v2)D(v3)D(v4)0{a}--2∞∞101{a,v1}v1225∞92{a,v1,v2}v2525993{a,v1,v2,v3}v3925994全部v492599aV1V2V4V321073654
InvitationCards(zju2008/pku1511)已知各站点间的乘车花费。要从站点1乘车到各站点,然后从各站点乘车返回1。计算一下最小总花费。(1≤站点个数≤1000000)输入:
222
1213
2133
46
1210
2160
1320
3410
245
4150输出:46
210
最短路径Floyd算法:定义一个n×n的方阵序列∶A0,A1,A2,…,An,其中Ak[i-1][j-1]表示从vi到vj允许k个顶点v0,v1,…,vk-1为中间顶点的最短路径长度(0≤k≤n),并且A0等于图的邻接矩阵。A0[i][j]表示从vi到vj不经过任何中间顶点的最短路径长度。An[i][j]就是从vi到vj的最短路径长度。A0[i][j]=arcs[i][j] 0≤i≤n-1,0≤j≤n-1Ak[i][j]=min{Ak-1[i][j],Ak-1[i][k-1]+Ak-1[k-1][j]} 1≤k≤n,加入第k个顶点vk-1为中间顶点。
Floyd算法for(k=0;kn;k++)for(i=0;in;i++)for(j=0;jn;j++)if(d[i][j]d[i][k]+d[k][j])d[i][j]=d[i][k]+d[k][j];(d[i][j]=Min(d[i][j],d[i][k]+d[k][j]))
StockbrokerGrapevine(zju1082)股票经纪人对谣言的过分反应是周知的。你受雇找一种在股市中散布谣言的方法,使之以最快的速度传播出去。你必须把谣言先传给一个最合适的人。输入:3
22435
21236
21222
5
3442853
158
4164102752
0
22515
0输出:32
310
01湖中有一些石头露出水面。青蛙Freddy蹲在其中一块上面,他女朋友Fiona在另一块上。Freddy想跳到Fiona那里。02Freddy可以在两石头间跳跃,有不同的路径选择;他希望找到一条路,路上跳跃的最大距离最小。03输入这些石头的坐标,输出这个最小值。Frogger(zju1942)
存在欧拉回路的条件:无向图:所有顶点的度数都是偶数。有向图:所有顶点的出度等于入度。混合图:想办法把无向边定向,使所有点出度等于入度。输出欧拉回路的方法:DFS欧拉回路
反复操作直到没有出度大的点为止。从一个出度大的点出发,寻找一条路径(路径上的边是原图的无向边),中止于出度小的点。然后对这条路径逆向。无向边随意定向,生成一个有向图,当有结点的出入度之差为奇数,则不存在欧拉回路。混合图中的处理:欧拉回路
Necklace(uva10054)一串项链的珠子有两种颜色,串起来时要求相邻颜色一样。给了一些珠子,判断是否能串起来。输入:25122334455652122343124输出:Case#1somebeadsmaybelostCase#22113344222
OuroborosSnake(uva10040)圆环上分布着2n个0、1,按顺序连续取n个,就能把0~2n-1个整数都取到。(0n22)
EulerCircuit(uva10735)在混合图中判断是否存在欧拉回路,存在则输出之。输出:134256541Noeulercircuitexist输入:26813U1
文档评论(0)