//用鄰接表的方法儲存網
#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 ...