求單源的最短路徑

2021-07-26 11:28:01 字數 2328 閱讀 4633

//用鄰接表的方法儲存網

#include

#include

#include

#include

#define inf 0x3f3f3f

#define node_max 20

using

namespace

std;

vector

path[node_max];//儲存路徑

int d[node_max];//儲存路徑長度

int p[node_max];//儲存過程中的路徑長度

typedef

struct arcnodearcnode;

typedef

struct vnodevnode;

typedef

structlgraph;

int findv(char v,vnode *p,int num)

bool createdn(lgraph &g)

arcnode *a=(arcnode *)malloc(sizeof(arcnode)*g.arcnum);//弧結點分配空間

arcnode **p=(arcnode **)malloc(sizeof(arcnode *)*g.vexnum);//*(p+t)指向過程中t頂點指向的最後弧結點

for(int t=0;tchar v1,v2;

int i,j,x;

cout

<<"請輸入第"

<1

<<"條弧的弧尾弧頭名稱及長度"

>v1>>v2>>x;

i=findv(v1,g.vexs,g.vexnum);

j=findv(v2,g.vexs,g.vexnum);

(a+t)->adjvex=j;(a+t)->length=x;(a+t)->next=null;//建立弧結點

if(g.vexs[i].first==null)

*(p+i)=g.vexs[i].first=a+t;

else

}return

true;

}bool createudn(lgraph &g)

arcnode *a=(arcnode *)malloc(sizeof(arcnode)*g.arcnum*2);//弧結點分配空間

arcnode **p=(arcnode **)malloc(sizeof(arcnode *)*g.vexnum);//*(p+t)指向過程中t頂點指向的最後弧結點

for(int t=0;tchar v1,v2;

int i,j,x;

cout

<<"請輸入第"

<1

<<"條弧兩端名稱及長度"

>v1>>v2>>x;

i=findv(v1,g.vexs,g.vexnum);

j=findv(v2,g.vexs,g.vexnum);

(a+t)->adjvex=j;(a+t)->length=x;(a+t)->next=null;//建立弧結點

(a+t+g.arcnum)->adjvex=i;(a+t+g.arcnum)->length=x;(a+t+g.arcnum)->next=null;//建立弧結點

if(g.vexs[i].first==null)

*(p+i)=g.vexs[i].first=a+t;

else

if(g.vexs[j].first==null)

*(p+j)=g.vexs[j].first=a+t;

else

}return

true;

}bool createlgraph(lgraph &g)

return

true;

}void dij(lgraph &g,char v)//算g圖各頂點到v的最短路徑

for(int t=0;t1;t++) //需要進行g.vexnum-1次

}d[e]=min;

path[e].push_back(e);

p=g.vexs[e].first;

while(p!=null)

p=p->next;}}

}int main()

cout<<"請輸入單源最短路徑的源頂點名稱"

>v;

dij(g,v);

for(int t=0;tcout

<"->"

::iterator it=path[t].begin();it!=path[t].end();it++)

cout

<" ";

if(d[t]!=inf) cout

cout

<"無"

0;}

Dijkstra求單源最短路徑

思路 dijkstra求解帶權有向圖的單源最短路徑問題。與bellman ford演算法的區別是要求圖中沒有負的權值邊。在這種情況下dijkstra演算法通常有比較好的複雜度。特別是使用堆以後。演算法維護乙個點集s,該集合中的結點的最短路徑已經求出,演算法重複從結點集v s中選擇最短路徑估計最小的結...

Dijkstra求單源最短路徑

leetcode743 預定義 define mvnum 100 define imax 88888 無窮大 鄰接矩陣 typedef structmgraph 構造鄰接矩陣 int locatevex amgraph g,vertextype v return 1 int creategraph ...

單源最短路徑

include define max 999 define maxverts 10 typedef struct graph void chushi graph g void dij graph int key,int int int main for i 1 i g.numverts i dij ...