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

M.J的blog

algorithm,ACM-ICPC
隨筆 - 39, 文章 - 11, 評論 - 20, 引用 - 0
數據加載中……

【圖論】最短路和最小生成樹

兩個算法具有相當大的相似性,而且都用到了貪心思想,所以把他們放到一起。最短路常用的算法有dijkstra,bellman-ford,floyd。而最小生成樹則是prim和kruskal。下面是各個算法的模板。
Dijkstra:
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define INF 0x1f1f1f1f
 4 #define M 1001
 5 int map[M][M],dis[M];
 6 bool flag[M];
 7 void dijkstra(int s,int n,int t)            //s是源點,n是點的個數,t是目的點
 8 {
 9     int i,j,k,md,temp;
10     for(i=1;i<=n;i++)
11         dis[i]=INF;                        //初始化將所有dis置為無窮大,源點為0
12     dis[s]=0;
13     memset(flag,false,sizeof(flag));       //開始flag全部為false,表示集合為空
14     for(i=1;i<n;i++){                      //進行n-1次迭代,每次找出不在集合中的最小邊
15         md=INF;                                           
16         for(j=1;j<=n;j++){
17             if(!flag[j]&&dis[j]<md){
18                 md=dis[j];
19                 temp=j;
20             }
21         } 
22         if(temp==t) break;                 //如果遇到目的點,可以跳出了
23         flag[temp]=true;                   //將這個最小邊的點加入集合
24         for(j=1;j<=n;j++){
25             if(!flag[j]&&md+map[temp][j]<dis[j])    //對所有出邊進行松弛操作
26                 dis[j]=md+map[temp][j];
27         }
28     }
29 }

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
相應的最小生成樹的prim模板:

 1 #include<iostream>
 2 #define INF 0x1f1f1f1f
 3 #define M 1000
 4 using namespace std;
 5 double dis[M],map[M][M];
 6 bool flag[M];
 7 int prim(int s,int n)                        //s為起點,n為點的個數
 8 {
 9     int i,j,k,temp,md,total=0;
10     for(i=1;i<=n;i++)
11         dis[i]=map[s][i];                    //與最短路不同,而是將dis置為map[s][i]
12     memset(flag,false,sizeof(flag));
13     flag[s]=true;                            //將起點加入集合
14     for(i=1;i<n;i++){                        //依舊進行n-1次迭代,每次找到不在集合的最小邊
15         md=INF;
16         for(j=1;j<=n;j++){
17             if(!flag[j]&&dis[j]<md){
18                 md=dis[j];
19                 temp=j;
20             }
21         }
22         flag[temp]=true;                      //將找到的最小邊的點加入集合
23         total+=md;                            //并將這個邊的權值加到total中
24         for(j=1;j<=n;j++)                     //松弛操作,注意與最短路不同
25             if(!flag[j]&&dis[j]>map[temp][j])
26                 dis[j]=map[temp][j];
27     }
28     return total;
29 }
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面是最短路的bellmen-ford算法,與dijkstra不同,bellman-ford可以運用于有負權值的圖,不過復雜度很高,O(VE )... 慎用~(可以用SPFA,但是那個算法我掌握的不是很好:D)
Bellman-ford算法同樣是對每條邊進行N-1次松弛,當有權值為負時,對所有邊進行N-1次松弛,如果dis還能更新,說明有負環。
Bellman-ford模板:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define INF 0x1f1f1f1f
 4 #define MAX 102
 5 #define MAXM 20008
 6 
 7 int dist[MAX];
 8 
 9 struct Edge{             //邊結構體定義 
10     int u, v, w;
11     Edge(){}
12     Edge(int a, int b, int c):u(a), v(b), w(c){}
13 }edge[MAXM];
14 
15 int bellman_ford(int n, int m, int s)   //n個點、m條邊、s為起點 
16 {
17     memset(dist, 0x1fsizeof(dist));    //初始化距離很大 
18     dist[s] = 0;
19     int i, j, u, v, f;
20     for (i = 1; i < n; ++i)         //迭代 n - 1 次,對每條邊進行n-1次松弛
21     {
22            f = 0;
23          for (j = 0; j < m; ++j)
24            {
25          u = edge[j].u;
26          v = edge[j].v;
27              if (dist[v] > dist[u] + edge[j].w)  // 松弛操作 
28                 {
29              dist[v] = dist[u] + edge[j].w;
30                        f = 1;
31          }
32          }
33          if (!f) return 1;          //如果其中一次迭代沒改變,停止
34     }
35     for(j = 0; j < m; ++j)     //再進行一次迭代 
36     {
37          u = edge[j].u;
38          v = edge[j].v;
39          if (dist[v] > dist[u] + edge[j].w)    //若還能松弛, 則存在負環 
40             return -1;                    //存在負環返回 -1 
41     }
42     return 1;       //沒有負環返回 1 
43 }
算法結束后dist數組已經是最短路徑。

posted on 2010-04-30 18:54 M.J 閱讀(2006) 評論(1)  編輯 收藏 引用

評論

# re: 【圖論】最短路和最小生成樹  回復  更多評論   

太棒了
2014-02-07 17:01 | 楊玉飛
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久蜜桃精品| 亚洲香蕉网站| 欧美成人日本| 免费成人av在线| 日韩视频在线观看一区二区| 亚洲美女尤物影院| 国产精品区一区二区三| 久久精品国产第一区二区三区最新章节 | 欧美日韩一区二| 亚洲一区免费| 99国产精品久久久久老师| 久久精品国产久精国产一老狼 | 欧美精品一区在线播放| 一区二区久久| 欧美永久精品| 一区二区三区产品免费精品久久75 | 欧美一级网站| 最新成人av在线| 在线一区二区三区做爰视频网站| 国产日韩一区二区三区| 亚洲成在人线av| 久久成人一区| 奶水喷射视频一区| 亚洲欧美一区二区三区在线 | 亚洲理论在线观看| 国产日本精品| 99ri日韩精品视频| 亚洲春色另类小说| 亚洲一区免费网站| 亚洲精品中文字幕在线| 亚洲欧美日韩在线高清直播| 亚洲激情婷婷| 欧美有码视频| 亚洲欧美另类在线| 欧美肥婆bbw| 久久综合久久美利坚合众国| 欧美午夜一区二区| 亚洲精品国产视频| **性色生活片久久毛片| 亚洲欧美网站| 亚洲欧美日韩区| 欧美精品久久久久久久| 久热成人在线视频| 国产一区二三区| 午夜在线电影亚洲一区| 亚洲欧美成人精品| 欧美偷拍另类| 亚洲精品在线观看免费| 91久久久久| 久久久噜噜噜久久狠狠50岁| 久久精品视频在线看| 国产精品www994| 亚洲精品中文字幕女同| 亚洲韩日在线| 欧美成人免费小视频| 欧美3dxxxxhd| 1769国产精品| 欧美aaaaaaaa牛牛影院| 美日韩精品视频| 亚洲第一区在线观看| 久久噜噜亚洲综合| 蜜臀久久久99精品久久久久久| 国产一区视频观看| 久久久国产91| 欧美激情乱人伦| 91久久精品久久国产性色也91| 亚洲午夜激情网页| 欧美日韩黄视频| 亚洲区一区二| 中日韩在线视频| 欧美日韩系列| 亚洲一区激情| 久久久久国产成人精品亚洲午夜| 国产一区二区日韩| 久久综合图片| 最新亚洲视频| 亚洲欧美激情四射在线日| 国产欧美日韩在线| 久久久999精品视频| 亚洲国产精品成人久久综合一区| 一本大道久久a久久综合婷婷| 欧美久久一区| 午夜精彩视频在线观看不卡| 久久精品成人一区二区三区蜜臀 | 国产久一道中文一区| 久久aⅴ乱码一区二区三区| 老色批av在线精品| 亚洲精品国产精品国自产观看浪潮 | 欧美91大片| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 一区二区三区欧美在线| 欧美伊人久久久久久午夜久久久久 | 国产精品爽黄69| 久久精品官网| 最新日韩欧美| 久久久久久久久久久一区| 亚洲日韩成人| 国产日韩欧美精品综合| 欧美成人免费在线视频| 亚洲欧洲av一区二区三区久久| 久久综合九色99| 亚洲在线视频免费观看| 今天的高清视频免费播放成人| 欧美黄色一区| 欧美诱惑福利视频| 一本久久青青| 欧美超级免费视 在线| 亚洲综合999| 最近看过的日韩成人| 国产麻豆综合| 欧美日韩一区二区高清| 久久天天狠狠| 欧美一区永久视频免费观看| 日韩视频在线免费| 久色成人在线| 久久爱www久久做| 亚洲网在线观看| 亚洲国产日本| 在线观看欧美一区| 国产一区二区观看| 国产精品美女www爽爽爽| 欧美成人午夜激情在线| 久久久噜噜噜久久中文字幕色伊伊 | 午夜精品av| 一区二区三区国产精品| 欧美大片免费观看| 久久国产成人| 性色av一区二区三区| 一区二区欧美亚洲| 日韩午夜av| 亚洲美女av网站| 亚洲欧洲一区二区在线播放| 黄色成人精品网站| 国产亚洲毛片在线| 国产亚洲a∨片在线观看| 国产女主播在线一区二区| 欧美日韩直播| 欧美图区在线视频| 国产精品久久久久久妇女6080| 欧美日韩理论| 欧美视频中文在线看| 欧美日韩另类综合| 欧美日韩亚洲另类| 欧美性猛交99久久久久99按摩| 欧美日韩亚洲精品内裤| 欧美性理论片在线观看片免费| 欧美视频一区二区三区…| 欧美日韩中文字幕在线视频| 欧美破处大片在线视频| 欧美日韩在线播放三区| 欧美日韩精品在线| 国产精品久久久久久久久久尿| 国产精品欧美久久久久无广告| 国产精品综合视频| 黄色综合网站| 亚洲精品久久久久中文字幕欢迎你 | 亚洲视频在线视频| 亚洲欧美另类中文字幕| 久久国产婷婷国产香蕉| 麻豆国产va免费精品高清在线| 免费日韩视频| 亚洲精品日日夜夜| 亚洲午夜久久久久久久久电影网| 亚洲欧美日本另类| 久久久久成人网| 欧美精品成人一区二区在线观看 | 欧美成人免费大片| 欧美图区在线视频| 狠狠做深爱婷婷久久综合一区| 最新高清无码专区| 香蕉久久夜色精品国产| 裸体歌舞表演一区二区 | 欧美一区二区三区在线播放| 久久精品在线免费观看| 亚洲国产综合在线看不卡| 宅男精品导航| 久久久久久九九九九| 欧美日韩国产大片| 娇妻被交换粗又大又硬视频欧美| 亚洲另类在线视频| 久久成人亚洲| 日韩一区二区免费高清| 欧美主播一区二区三区美女 久久精品人 | 美女视频黄a大片欧美| 99精品久久久| 久久久夜色精品亚洲| 欧美伦理91i| 精品91在线| 亚洲欧美视频在线| 亚洲国产美国国产综合一区二区| 亚洲一区二区三区在线| 女女同性精品视频| 国产一区二区三区不卡在线观看 | 久久黄色级2电影| 蜜乳av另类精品一区二区| 亚洲图片欧洲图片av| 欧美成人伊人久久综合网| 国产午夜精品久久| 亚洲一二区在线| 亚洲激情欧美激情|