[算法][最短路]dijkstra + heap 和 spfa 程序,时间比较.doc_第1页
[算法][最短路]dijkstra + heap 和 spfa 程序,时间比较.doc_第2页
[算法][最短路]dijkstra + heap 和 spfa 程序,时间比较.doc_第3页
[算法][最短路]dijkstra + heap 和 spfa 程序,时间比较.doc_第4页
[算法][最短路]dijkstra + heap 和 spfa 程序,时间比较.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

dijkstra就不解释了,随便一本算法书上都有,只贴程序(百度会把缩进干掉的,将就着看吧)spfa我以前贴过,自己看:/hefeizhousiyuan/blog/item/99114feac0c973d5d539c9d7.html理论上来讲dij时间是O(ElogV),而spfa是O(kE)(k约为2),但是spfa实质上只是bellman-ford的一种实现方法,依然可以构造出数据是它的时间复杂度退化成O(VE)的。不过,在绝大多数情况下,spfa的性能还是不会比dij+heap差的,最重要的是spfa代码更短。以usaco 3.2 butter来比较,spfa稍胜一些。(V=700,E=1450,调用最短路过程700次)dijkstra + heapExecuting. Test 1: TEST OK 0.000 secs, 248 KB Test 2: TEST OK 0.000 secs, 248 KB Test 3: TEST OK 0.000 secs, 252 KB Test 4: TEST OK 0.011 secs, 248 KB Test 5: TEST OK 0.011 secs, 252 KB Test 6: TEST OK 0.032 secs, 252 KB Test 7: TEST OK 0.162 secs, 252 KB Test 8: TEST OK 0.313 secs, 280 KB Test 9: TEST OK 0.626 secs, 280 KB Test 10: TEST OK 0.594 secs, 284 KBspfaExecuting. Test 1: TEST OK 0.000 secs, 244 KB Test 2: TEST OK 0.000 secs, 240 KB Test 3: TEST OK 0.000 secs, 240 KB Test 4: TEST OK 0.000 secs, 240 KB Test 5: TEST OK 0.011 secs, 244 KB Test 6: TEST OK 0.022 secs, 244 KB Test 7: TEST OK 0.065 secs, 244 KB Test 8: TEST OK 0.130 secs, 272 KB Test 9: TEST OK 0.259 secs, 276 KB Test 10: TEST OK 0.248 secs, 276 KBdijkstra+heap(邻接表实现)Type link = node; node = record v , w : integer; next : link; end;Const maxn = 1000;Var n , m , l : integer; a : array1.maxn of link; hp : array1.maxn of integer; t : array0.maxn of record v : integer; d : longint; end;Procedure insert(x , y , w : integer);var p : link;begin new(p); p.v := y;p.w := w; p.next := ax;ax := p;end;Procedure init;var i , x , y , w : integer;begin readln(n , m); for i := 1 to m do begin readln(x , y , w); insert(x , y , w); end;end;procedure swap(a , b : integer);begin t0 := ta; ta := tb; tb := t0; hpta.v := a; hptb.v := b;end;procedure setheap(st : integer);var i : integer;begin for i := 1 to n do begin ti.v := i; ti.d := maxlongint; hpi := i; end; tst.d := 0; swap(1 , st);end;procedure down(x : integer);var i , j , m : integer;begin i := x; while i * 2 = l do (* *) begin j := i * 2; if (i * 2 + 1 = l) and (ti * 2 + 1.d tj.d then begin swap(i , j); i := j; end else break; end;end;procedure up(x : integer);var i : integer;begin i := x; while i 1 do begin if ti.d ti div 2.d then begin swap(i , i div 2); i := i div 2; end else break; end;end;procedure relax(u , v : integer; w : longint);begin if t hpu .d + w 0 do begin u := t1.v; swap(1 , l); dec(l); down(1); p := au; while p nil do begin if hpp.v = l then relax(u , p.v , p.w); p := p.next; end; end;end;Procedure print;var i :

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论