最短路徑演算法表示

2021-09-07 10:37:17 字數 2664 閱讀 8098

layout: post

title: 最短路徑演算法表示

date: 2017-04-16

tag: 資料結構和演算法

---

#include #include #include #include using namespace std;

/* 圖的鄰接表表示法 */

#define maxvertexnum 100 /*最大頂點數設為100*/

#define infinity 65535 /*設為雙位元組無符號整數的最大值為65535*/

typedef int vertex; /*用頂點下標表示頂點,為整型*/

typedef int weighttype; /*邊的權值設為整型*/

typedef char datatype; /*頂點儲存的資料型別設為字元型*/

/*邊的定義*/

typedef struct enode* ptrtoenode;

struct enode

;typedef ptrtoenode edge;

/*鄰接點的定義*/

typedef struct adjvnode *ptrtoadjvnode;

struct adjvnode

;/*頂點表頭結點的定義*/

typedef struct vnode

adjlist[maxvertexnum];

/*圖結點的定義*/

typedef struct gnode *ptrtognode;

struct gnode

;typedef ptrtognode lgraph; /* 以鄰接表方式儲存的圖型別 */

/*鄰接表儲存--無權圖的段園最短路徑演算法*/

/* dist和path全部初始化為-1*/

void unweighted(lgraph graph, int dist, int path, vertex s)

}} //end while

}

理解思路

演算法複雜度

/*!

* \file 圖-最短路徑問題.cpp

* * \author ranjiewen

* \date 2017/04/16 11:31

* *

*/#include #include #include #include using namespace std;

/* 圖的鄰接表表示法 */

#define maxvertexnum 100 /*最大頂點數設為100*/

#define infinity 65535 /*設為雙位元組無符號整數的最大值為65535*/

typedef int vertex; /*用頂點下標表示頂點,為整型*/

typedef int weighttype; /*邊的權值設為整型*/

typedef char datatype; /*頂點儲存的資料型別設為字元型*/

/*邊的定義*/

typedef struct enode* ptrtoenode;

struct enode

;typedef ptrtoenode edge;

/*圖結點的定義*/

typedef struct gnode_ *ptrtognode;

struct gnode_ //區別gnode

;typedef ptrtognode mgraph; /*用鄰接矩陣儲存的圖型別*/

/* 鄰接矩陣儲存 --有權圖的單源最短路徑演算法*/

vertex findmindist(mgraph graph, int dist, int collected)

if (dist[v] + graph->g[v][w]g[v][w]; /* 更新dist[w] */

path[w] = v; /* 更新s到w的路徑 */}}

}} //end while

return true; /* 演算法執行完畢,返回正確標記 */

}#include void showpath(int *path, int v, int v0) //列印最短路徑上的各個頂點

s.push(v);

while (!s.empty())

}int main()

}graph->ne = e;

graph->nv = n;

for (i = 0; i < e;i++)

int s=0; //源點

dijkstra(graph, dist, path, s);

for (i = 0; i < n;i++)}}

return 0;

}

2).演算法描述:

/* 鄰接矩陣儲存 - 多源最短路演算法 */

bool floyd( mgraph graph, weighttype d[maxvertexnum], vertex path[maxvertexnum] )

for( k=0; knv; k++ )

for( i=0; inv; i++ )

for( j=0; jnv; j++ )

if( d[i][k] + d[k][j] < d[i][j] )

return true; /* 演算法執行完畢,返回正確標記 */

}

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...

最短路徑演算法

floyd演算法 012345 001 54 1108 1 2 801 3 3 1035 45 302 5413520 floyd 演算法過程描述如下 首先 以邊集 初始化,得到所有的直接連通代價 依次考慮第 k個結點,對於 中的每乙個 i j 判斷是否滿足 s i j s i k s k j 如果...

最短路徑演算法

個人覺得下面 有代表性 最短路徑演算法原始碼 vb 本人載 開發gis,遊自編的最短路徑查詢程式,速度特快,3萬節點,35000條路全部遍歷,只需1秒。現將最短路徑的思路告訴大家,希望大家在優化,並用不同語言編制,我正在學delphi,準備用delphi做成庫,本例以由拓撲關係的arc info 檔...