青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

Bellman-Ford && SPFA 算法

Posted on 2010-10-23 22:09 MiYu 閱讀(958) 評論(0)  編輯 收藏 引用 所屬分類: ACM ( 圖 )ACM_資料

MiYu原創(chuàng), 轉(zhuǎn)帖請注明 : 轉(zhuǎn)載自 ______________白白の屋    

 

 B-F 

適用條件&范圍

  1. 單源最短路徑(從源點s到其它所有頂點v);
  2. 有向圖&無向圖(無向圖可以看作(u,v),(v,u)同屬于邊集E的有向圖);
  3. 邊權可正可負(如有負權回路輸出錯誤提示);
  4. 差分約束系統(tǒng);

算法描述

  1. 對每條邊進行|V|-1次Relax ( 就是松弛操作 )操作;
  2. 如果存在(u,v)∈E使得dis[u]+w<dis[v],則存在負權回路;否則dis[v]即為s到v的最短距離,pre[v]為前驅(qū)。
For i:=1 to |V|-1 do //v為頂點數(shù)
For 每條邊(u,v)∈E do  //對每條邊進行遍歷
  Relax(u,v,w);
For每條邊(u,v)∈E do
  If dis[u]+w<dis[v] Then Exit(False)

時空復雜度

算法時間復雜度O(VE)。因為算法簡單,適用范圍又廣,雖然復雜度稍高,仍不失為一個很實用的算法。

 

算法的改進---> SPFA 

 

算法簡介

SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一種隊列實現(xiàn),減少了不必要的冗余計算。也有人說SPFA本來就是Bellman-Ford算法,現(xiàn)在廣為流傳的Bellman-Ford算法實際上是山寨版。

算法流程

算法大致流程是用一個隊列來進行維護。 初始時將源加入隊列。 每次從隊列中取出一個元素,并對所有與他相鄰的點進行松弛,若某個相鄰的點松弛成功,則將其入隊。 直到隊列為空時算法結束。

這個算法,簡單的說就是隊列優(yōu)化的bellman-ford,利用了每個點不會更新次數(shù)太多的特點發(fā)明的此算法

SPFA——Shortest Path Faster Algorithm,它可以在O(kE)的時間復雜度內(nèi)求出源點到其他所有點的最短路徑,可以處理負邊。SPFA的實現(xiàn)甚至比Dijkstra或者Bellman_Ford還要簡單:

設Dist代表S到I點的當前最短距離,F(xiàn)a代表S到I的當前最短路徑中I點之前的一個點的編號。開始時Dist全部為+∞,只有Dist[S]=0,F(xiàn)a全部為0。

維護一個隊列,里面存放所有需要進行迭代的點。初始時隊列中只有一個點S。用一個布爾數(shù)組記錄每個點是否處在隊列中。

每次迭代,取出隊頭的點v,依次枚舉從v出發(fā)的邊v->u,設邊的長度為len,判斷Dist[v]+len是否小于Dist[u],若小于則改進Dist[u],將Fa[u]記為v,并且由于S到u的最短距離變小了,有可能u可以改進其它的點,所以若u不在隊列中,就將它放入隊尾。這樣一直迭代下去直到隊列變空,也就是S到所有的最短距離都確定下來,結束算法。若一個點入隊次數(shù)超過n,則有負權環(huán)。

SPFA 在形式上和寬度優(yōu)先搜索非常類似,不同的是寬度優(yōu)先搜索中一個點出了隊列就不可能重新進入隊列,但是SPFA中一個點可能在出隊列之后再次被放入隊列,也就是一個點改進過其它的點之后,過了一段時間可能本身被改進,于是再次用來改進其它的點,這樣反復迭代下去。設一個點用來作為迭代點對其它點進行改進的平均次數(shù)為k,有辦法證明對于通常的情況,k在2左右

算法代碼

Procedure SPFA;
 
Begin
  initialize-single-source(G,s);
  initialize-queue(Q);
  enqueue(Q,s);
  while not empty(Q) do 
    begin
      u:=dequeue(Q);
      for each v∈adj[u] do 
        begin
          tmp:=d[v];
          relax(u,v);
          if (tmp<>d[v]) and (not v in Q) then
            enqueue(Q,v);
        end;
    end;
End;


procedure spfa;
begin
  fillchar(q,sizeof(q),0); h:=0; t:=0;//隊列
  fillchar(v,sizeof(v),false);//v[i]判斷i是否在隊列中
  for i:=1 to n do 
    dist[i]:=maxint;//初始化最小值
 
  inc(t);
  q[t]:=1;
  v[1]:=true;
  dist[1]:=0;//這里把1作為源點
 
  while h<>t do
    begin
      h:=(h mod n)+1;
      x:=q[h];
      v[x]:=false;
      for i:=1 to n do
        if (cost[x,i]>0) and (dist[x]+cost[x,i]<dist[i]) then
          begin
            dist[i]:=dist[x]+cost[x,i];
            if not(v[i]) then
              begin
                t:=(t mod n)+1;
                q[t]:=i;
                v[i]:=true;
              end;
          end;
    end;
end;
void SPFA(void)//好久以前寫的……今天丟上來……話說我都不記得SPFA怎么寫了……囧……ms存圖是矩陣……嗯嗯
{
 int i;
 queue list;
 list.insert(s);
 for(i=1;i<=n;i++)
  {
   if(s==i)
    continue;
   dist[i]=map[s][i];
   way[i]=s;
   if(dist[i])
   list.insert(i);
  }
 int p;
 while(!list.empty())
 {
  p=list.fire();
  for(i=1;i<=n;i++)
   if(map[p][i]&&(dist[i]>dist[p]+map[p][i]||!dist[i])&&i!=s)
    {
     dist[i]=dist[p]+map[p][i];
     way[i]=p;
     if(!list.in(i))
      list.insert(i);
    }
 }
} 

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区网站| 亚洲精品一区二区在线观看| 久久国产精品亚洲va麻豆| 亚洲在线1234| 欧美一级久久| 久久精品二区三区| 久久婷婷国产麻豆91天堂| 久热精品视频| 欧美黄在线观看| 国产精品v欧美精品v日韩精品| 国产精品成人一区二区| 国产伦精品一区二区三区视频黑人| 国产精品亚洲网站| 国产一区二区三区在线观看网站| 激情欧美一区二区三区| 亚洲国产天堂久久国产91| 亚洲毛片在线看| 香蕉视频成人在线观看| 久久综合久色欧美综合狠狠| 欧美成人中文字幕在线| 亚洲美女91| 欧美一区二区三区四区在线观看| 亚洲精品日韩激情在线电影| 欧美另类久久久品| 国产精品自拍三区| 亚洲欧洲美洲综合色网| 亚洲免费在线电影| 欧美国产精品v| 亚洲欧美成人| 欧美精品乱人伦久久久久久| 国产亚洲一本大道中文在线| 日韩亚洲欧美在线观看| 久久频这里精品99香蕉| 亚洲视频欧美视频| 欧美精品久久天天躁| 国产偷国产偷精品高清尤物| 一区二区三区 在线观看视| 免费观看成人网| 午夜精品久久久久久久久久久久| 欧美成人网在线| 一区二区在线观看视频在线观看| 亚洲综合另类| 亚洲日本无吗高清不卡| 午夜亚洲视频| 欧美色一级片| 亚洲免费电影在线| 欧美高清在线视频观看不卡| 欧美亚洲尤物久久| 国产精品亚洲第一区在线暖暖韩国| 日韩视频国产视频| 欧美成人午夜激情在线| 久久福利电影| 国产色视频一区| 午夜精品福利一区二区三区av | 久久亚洲高清| 亚洲婷婷免费| 欧美小视频在线| 亚洲午夜精品久久| 夜夜嗨av色一区二区不卡| 欧美精品一区二区三区蜜臀| 亚洲精品社区| 最新国产拍偷乱拍精品| 欧美啪啪成人vr| 宅男在线国产精品| 亚洲美女在线看| 欧美视频在线观看视频极品| 亚洲一区二区三区国产| 亚洲视频一二三| 国产精品色网| 久久久久综合网| 久久久青草青青国产亚洲免观| 亚洲第一视频网站| 亚洲国产高清aⅴ视频| 欧美激情aⅴ一区二区三区 | 亚洲欧美一区在线| 亚洲一区影音先锋| 国产区亚洲区欧美区| 性刺激综合网| 亚洲乱码精品一二三四区日韩在线 | 久久久精品一品道一区| 欧美主播一区二区三区美女 久久精品人 | 免费日韩视频| 欧美电影免费网站| 一区二区三区欧美在线| 一区二区三区精品视频在线观看| 欧美性生交xxxxx久久久| 欧美亚洲日本网站| 久久久久综合一区二区三区| 在线播放国产一区中文字幕剧情欧美| 久色婷婷小香蕉久久| 欧美成人在线影院| 亚洲一区在线看| 久久精品国产精品亚洲综合| 亚洲激情成人网| 亚洲午夜av在线| 亚洲第一伊人| 亚洲一区999| 亚洲国产三级| 亚洲欧美日韩中文在线制服| 在线观看91久久久久久| 在线视频一区观看| 亚洲高清资源综合久久精品| 亚洲视频欧美在线| 亚洲国产欧美另类丝袜| 亚洲一区精彩视频| 亚洲精品美女久久久久| 欧美一区激情| 亚洲一区二区三区在线看| 久久综合999| 久久精品道一区二区三区| 欧美激情精品久久久久久大尺度| 欧美在线高清视频| 欧美精品日韩一本| 老司机午夜精品视频在线观看| 欧美日韩一区二区三区| 欧美国产日韩xxxxx| 国产一区二区久久精品| 一区二区三区日韩在线观看| 最新日韩欧美| 久久综合久久综合久久| 久久国产欧美| 欧美午夜精品久久久久久人妖| 欧美成人一区在线| 一区二区在线观看视频| 亚洲综合日本| 亚洲欧美变态国产另类| 欧美日韩不卡视频| 亚洲狠狠丁香婷婷综合久久久| 激情久久久久久久| 午夜宅男久久久| 香蕉久久夜色精品| 国产精品免费一区豆花| 一区二区不卡在线视频 午夜欧美不卡在 | 久久久久久久久一区二区| 激情综合亚洲| 日韩午夜在线观看视频| 在线观看三级视频欧美| 亚洲私人黄色宅男| 一区二区欧美国产| 欧美美女操人视频| 亚洲精品日韩在线| 在线综合亚洲| 欧美性猛片xxxx免费看久爱| 在线一区观看| 午夜精品美女自拍福到在线| 国产精品久久国产精品99gif | 99国产精品99久久久久久粉嫩| 亚洲国产第一| 免费视频亚洲| 亚洲国产一区二区精品专区| 黄色成人小视频| 久色成人在线| 亚洲电影免费观看高清完整版在线观看| 国模私拍一区二区三区| 久久福利一区| 亚洲黄色一区| 亚洲综合大片69999| 国产精品色婷婷久久58| 久久九九热re6这里有精品| 欧美电影在线观看完整版| 怡红院精品视频在线观看极品| 久久综合导航| 一区二区高清视频| 久久艳片www.17c.com| 亚洲精品老司机| 欧美三级中文字幕在线观看| 午夜精品久久久久久久白皮肤| 噜噜噜91成人网| 一本久久综合亚洲鲁鲁五月天| 国产精品毛片一区二区三区| 久久精品免费播放| 亚洲三级电影在线观看| 性欧美videos另类喷潮| 亚洲第一黄色网| 国产精品久久久99| 久久久天天操| 亚洲一级黄色av| 亚洲国产高清aⅴ视频| 亚洲自拍偷拍麻豆| 在线观看中文字幕不卡| 国产精品久久久久久久久免费樱桃| 久久本道综合色狠狠五月| 亚洲美女毛片| 麻豆久久婷婷| 亚洲欧美国产制服动漫| 91久久极品少妇xxxxⅹ软件| 国产精品一区二区久久| 欧美黄色精品| 久久一区中文字幕| 亚洲影院色在线观看免费| 亚洲国产日韩在线一区模特| 久久精品国产成人| 亚洲视频精品| 亚洲欧洲一区二区三区在线观看| 国产日韩精品综合网站| 欧美午夜在线| 欧美日韩在线视频一区| 欧美韩日精品| 欧美成人网在线| 欧美成人精品一区|