国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Prim算法和Dijkstra算法的異同

2019-11-06 06:19:13
字體:
來源:轉載
供稿:網友

之前一直覺得PRim和Dijkstra很相似,但是沒有仔細對比;

今天看了下,主要有以下幾點:

1:

Prim是計算最小生成樹的算法,比如為N個村莊修路,怎么修花銷最少。

Dijkstra是計算最短路徑的算法,比如從a村莊走到其他任意村莊的距離。

2:

Prim算法中有一個統計總len的變量,每次都要把到下一點的距離加到len中;

Dijkstra算法中卻沒有,只需要把到下一點的距離加到cls數組中即可;

3:

Prim算法的更新操作更新的cls是已訪問集合到未訪問集合中各點的距離;

23              for (j=0;j<n;j++)24              {25                  if (!visited[j] && map[j][nid]<adjset[j])//更新條件:j點未訪問,加入新點后已訪問集合到j的距離變小了26                  {27                      adjset[j] = map[j][nid];28                  }29              }

Dijkstra算法的更新操作更新的cls是源點到未訪問集合中各點的距離,已經訪問過的相當于已經找到源點到它的最短距離了;

20         for (j=1;j<=n;j++)21        {

22             if(!vis[j]&&map[nxt][j]<MAX&&(min+map[nxt][j])<cls[j])//更新條件:j點未訪問,新點與j點之間有路,23                 cls[j]=cls[nxt]+map[nxt][j];24         }

Prim算法

//初始化         memset(visited,0,sizeof(visited));         visited[0] = 1;         len = 0;         for (i=0;i<n;i++)    adjset[i] = map[i][0];         //Begin         for (i=1;i<n;i++)         {             //找到下一條符合條件的點             nlen = MAX;             for (j=0;j<n;j++)             {                 if (!visited[j] && adjset[j]<nlen)                 {                     nlen = adjset[j];                     nid = j;                 }             }             //訪問找到的那個點             len += nlen;             visited[nid] = 1;             //更新鄰接距離             for (j=0;j<n;j++)             {                 if (!visited[j] && map[j][nid]<adjset[j])                 {                     adjset[j] = map[j][nid];                 }             }

Dijkstra算法

void Dijkstra(int v){    int i,j,min,nxt;    for(i=1;i<=n;i++)    cls[i]=map[v][i];    memset(vis,0,sizeof(vis));    vis[v]=1;    for (i=1;i<n;i++)    {        min=MAX;        nxt=v;        for (j=1;j<=n;j++)        {            if(!vis[j]&&cls[j]<min)            {                nxt=j;                min=cls[j];            }        }        vis[nxt]=1;        for (j=1;j<=n;j++)        {            if(!vis[j]&&map[nxt][j]<MAX&&(min+map[nxt][j])<cls[j])                cls[j]=cls[nxt]+map[nxt][j];        }    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定结县| 宜兰县| 巴中市| 绥棱县| 富阳市| 聂拉木县| 高青县| 托克托县| 萝北县| 镇安县| 响水县| 平顶山市| 平武县| 衢州市| 巴林左旗| 洮南市| 南溪县| 余干县| 河池市| 茶陵县| 东兰县| 东阳市| 延边| 织金县| 东乡县| 玛曲县| 盱眙县| 武陟县| 井陉县| 肇东市| 五家渠市| 肥东县| 陵川县| 马关县| 开化县| 远安县| 阿巴嘎旗| 佛冈县| 平原县| 正镶白旗| 平度市|