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

bon

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  46 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

常用鏈接

留言簿(2)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

Dijkstra算法,最小優先隊列用堆(Heap)實現
偽代碼描述
void dijkstra()
{
         Q=V;
         S={};      // 空集
         while(Q!={})
         {
               v = ExtractMin(Q);
               S = S + {v};
               Q = Q - {v};
               for all edge(v,u), relax the edge;         // if(d[v] + dis[v][u] < d[u]) d[u] = d[v] + dis[v][u];
         }
}
  1/*
  2    最基本的二叉堆是實現不了的,因為dijkstra要求在運行過程中隨時修改堆內元素,因此要用擴展版的、引入了外部指針的二叉堆 
  3    另外,當圖用鄰接表來表示的時候,用二叉堆的時間復雜度為O(ElgV),不用二叉堆的復雜的是O(V^2);不用鄰接表的時候,用二叉
  4    堆時間復雜度為O(V^2lgV),不用二叉堆的時間復雜度為O(V^2)。也就是說,只有當使用鄰接表來表示稀疏圖的時候,使用二叉堆才
  5    有效率優勢。因此本程序使用鄰接表來表示圖
  6*/

  7#include <stdio.h>
  8#include <iostream>
  9#define INF 0xfffffff
 10#define MAXN 100
 11
 12using namespace std;
 13
 14int deg[MAXN];                // 節點i的度
 15int list[MAXN][MAXN][2];    // list[i][j][1]:節點i第j個鄰接節點在list中的下標,list[i][j][2]表示它們之間的距離
 16int heap[MAXN];                // 堆,heap[i]存儲的是節點的編號
 17int key[MAXN];                // 堆中元素的值,算法結束時為各點到源s的最短路的值
 18int pos[MAXN];                // pos[i]表示第i個節點在堆中的位置
 19int count;                    // 未找到最短路徑的節點數目,也是堆的大小
 20bool exist[MAXN];            // 標識節點i是否還未找到最短路
 21int n;                        // 結點數
 22int trace[MAXN];            // 存放最短路的路徑
 23// 交換兩個整數
 24void swap(int &a,int &b)
 25{
 26    int tmp=a;
 27    a=b;
 28    b=tmp;
 29}

 30// 向下調整
 31void siftdown(int index)
 32{
 33    pos[heap[count]]=pos[heap[index]];
 34    heap[index]=heap[count];
 35    int i=index,j;
 36    while(2*i<=count)
 37    {
 38        j=2*i;
 39        if(key[heap[j+1]]<key[heap[j]] && j+1<=count) j++;
 40        if(key[heap[j]]>=key[heap[i]]) break;
 41        swap(pos[heap[i]],pos[heap[j]]);
 42        swap(heap[i],heap[j]);
 43        i=j;
 44    }

 45}

 46// 向上調整
 47void siftup(int index)
 48{
 49    int i=index;
 50    while(i>1 && key[heap[i]]<key[heap[i/2]])
 51    {
 52        swap(pos[heap[i]],pos[heap[i/2]]);
 53        swap(heap[i],heap[i/2]);
 54        i/=2;
 55    }

 56}

 57// 找到當前離source最近的點,返回它的編號
 58int extract()
 59{
 60    int tmp=heap[1];
 61    if(count>1) siftdown(1);
 62    return tmp;
 63}

 64// 修改編號為id的結點在堆中的值,并調整堆
 65void relax(int u)
 66{// 若d[u]+dis[u][v]<d[v],則修改d[v]為d[u]+dis[u][v];u為剛從堆中彈出的點,有向邊(u,v)
 67    for(int i=0;i<deg[u];i++)
 68    {
 69        if(exist[list[u][i][0]] == true && key[u]+list[u][i][1]<key[list[u][i][0]])
 70        {
 71            key[list[u][i][0]]=key[u]+list[u][i][1];
 72            trace[list[u][i][0]]=u;
 73            int p=pos[list[u][i][0]];
 74            siftup(p);
 75        }

 76    }

 77}

 78
 79void dijkstra()
 80{
 81    int i,j,k;
 82    for(i=1;i<=n;i++)
 83    {
 84        heap[i]=i;
 85        exist[i]=true;
 86        pos[i]=i;        // 源為1
 87        key[i]=INF;
 88    }

 89    // 初始時堆Q中存放所有的節點
 90    count=n;
 91    key[1]=0;
 92    while(count>0)
 93    {
 94        int id=extract();    // 當前距離節點1最近的點提出來并修改所有與它鄰接的點
 95          count--;
 96        exist[id]=false;
 97        relax(id);
 98    }

 99    return;
100}

101
102int main()
103{
104    freopen("test.txt","r",stdin);
105    scanf("%d",&n);
106    count=n;
107    for(int i=1;i<=n;i++)
108    {
109        scanf("%d",&deg[i]);
110        for(int j=0;j<deg[i];j++)
111        {
112            scanf("%d%d",&list[i][j][0],&list[i][j][1]);
113        }

114    }

115    dijkstra();
116    for(i=1;i<=n;i++) printf("node %d precessor %d length %d\n",i,trace[i],key[i]);
117    return 1;
118}
posted on 2008-01-19 21:32 bon 閱讀(215) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


Google PageRank 
Checker - Page Rank Calculator
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美中文日韩v在线观看| 欧美日韩免费在线| 亚洲国产影院| 久久综合伊人| 久久久久久一区二区| 久久九九久久九九| 久久久久在线| 亚洲日韩视频| 亚洲一区日本| 噜噜噜在线观看免费视频日韩| 欧美成年网站| 国产精品乱人伦一区二区| 国产一区二区三区在线观看免费| 18成人免费观看视频| 一本到12不卡视频在线dvd| 亚洲欧美一区二区精品久久久| 久久国产精品免费一区| 免费视频一区| 亚洲精选久久| 久久精品欧洲| 欧美日韩中文字幕日韩欧美| 国产亚洲欧美日韩精品| 亚洲欧洲精品天堂一级| 亚洲欧美日韩在线一区| 牛人盗摄一区二区三区视频| 亚洲免费观看高清完整版在线观看| 午夜伦理片一区| 欧美日韩大片| 亚洲国产精品嫩草影院| 亚洲综合第一页| 国产精品久久一级| 久久久夜精品| 久久噜噜噜精品国产亚洲综合| 亚洲在线观看免费| 亚洲欧美www| 免费成人美女女| 国产精品乱码| 1024成人网色www| 亚洲精品中文字幕女同| 亚洲制服av| 欧美激情一区二区在线| 亚洲已满18点击进入久久| 久久亚洲不卡| 国产精品三级视频| 亚洲一区二区精品视频| 欧美激情四色 | 最新亚洲电影| 久久av在线| av成人激情| 免费视频一区| 一区二区三区自拍| 久久久久.com| 午夜精品电影| 国产精品午夜久久| 亚洲性人人天天夜夜摸| 欧美bbbxxxxx| 久久久999| 国产性做久久久久久| 亚洲欧美国产va在线影院| 免费成人美女女| 欧美在线视频一区| 国产在线拍偷自揄拍精品| 欧美在线观看视频在线 | 亚洲一区二区视频在线观看| 蜜桃久久精品乱码一区二区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久精品导航| 海角社区69精品视频| 欧美专区日韩视频| 亚洲大胆在线| 这里只有精品视频在线| 亚洲三级免费| 欧美精品在线免费观看| 99国产精品一区| 亚洲精品欧美| 欧美成人免费网| 亚洲免费精彩视频| 99精品欧美一区二区三区| 欧美日韩综合视频网址| 中国成人亚色综合网站| 一区二区三区久久| 国产日韩一区二区三区| 老牛国产精品一区的观看方式| 久久久99爱| 99ri日韩精品视频| 亚洲欧美一区二区精品久久久| 狠狠色狠狠色综合系列| 男人的天堂亚洲在线| 欧美精品九九99久久| 亚洲嫩草精品久久| 久久精品在线播放| 一区二区三区久久久| 亚洲欧美日韩区| 亚洲国产清纯| 亚洲精品日本| 韩国一区二区三区美女美女秀| 欧美激情一区二区三级高清视频| 欧美日韩色婷婷| 久久久久久穴| 欧美三级日本三级少妇99| 久久精品国产免费观看| 欧美电影在线观看| 久久精品国产99| 欧美理论电影在线播放| 国语自产偷拍精品视频偷| 欧美成年人在线观看| 欧美视频你懂的| 欧美一区二区播放| 99av国产精品欲麻豆| 欧美专区第一页| 一区二区三区免费网站| 久久久女女女女999久久| 亚洲欧美国产高清va在线播| 久久亚洲综合色| 久久gogo国模啪啪人体图| 欧美大片va欧美在线播放| 亚洲专区欧美专区| 女女同性女同一区二区三区91| 亚洲女人小视频在线观看| 久久综合亚洲社区| 欧美一区深夜视频| 欧美激情成人在线| 久热爱精品视频线路一| 国产精品一区二区三区四区五区| 亚洲精品久久7777| 亚洲激情av| 欧美影院视频| 亚洲欧美福利一区二区| 麻豆视频一区二区| 久久久综合激的五月天| 国产精品久久久一区二区三区| 最新国产成人av网站网址麻豆| 亚洲国产高清一区| 久久久久久亚洲精品中文字幕| 欧美私人啪啪vps| 亚洲美女在线观看| 亚洲精品久久久久久久久久久久 | 久久精品国产亚洲5555| 久久成人国产| 国产亚洲欧美另类中文| 久久福利电影| 美国三级日本三级久久99| 国产亚洲精品资源在线26u| 午夜精品理论片| 久久久久国产精品一区三寸 | 欧美freesex8一10精品| 免费一区视频| 亚洲人成人一区二区三区| 欧美xart系列高清| 亚洲欧洲一区二区三区在线观看| 亚洲美洲欧洲综合国产一区| 欧美日韩国产成人| 亚洲中无吗在线| 美女主播一区| 一区二区三区毛片| 国产欧美二区| 另类春色校园亚洲| 99国产精品久久久久久久| 欧美一级欧美一级在线播放| 国内精品久久久久久| 久久免费少妇高潮久久精品99| 亚洲电影免费在线观看| 亚洲深夜福利在线| 国内精品视频一区| 欧美久久电影| 欧美一区2区三区4区公司二百| 欧美va亚洲va日韩∨a综合色| 日韩写真在线| 国产亚洲成av人在线观看导航 | 欧美高清不卡| 亚洲免费中文字幕| 欧美成人精品在线播放| 亚洲主播在线| 亚洲第一网站| 国产精品自在欧美一区| 麻豆精品视频在线| 亚洲在线视频免费观看| 欧美a级片网站| 欧美一级淫片aaaaaaa视频| 亚洲精品1区2区| 国产精品入口日韩视频大尺度| 久久影院午夜论| 亚洲欧美视频在线观看视频| 亚洲国产日韩精品| 久久午夜视频| 午夜欧美视频| 一区二区三区蜜桃网| 亚洲大胆视频| 国产一区二区三区在线观看精品 | 欧美精品色网| 久久免费精品视频| 欧美一级精品大片| 一本色道久久加勒比精品| 欧美国产欧美亚州国产日韩mv天天看完整| 这里只有精品电影| 亚洲美女在线一区| 亚洲欧洲午夜| 欧美1区免费| 久久激情中文| 欧美一区二区国产|