迪杰斯特拉算法求最短路径 C++代码实现

#include #include using namespace std; /*邻接矩阵的类型定义*/ #define MAX 10000000 #define MAX_VERTEX_NUM 20 typedef struct { string vexs[MAX_VERTEX_NUM];//用一维数组存储顶点信息 int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//用二维数组充当矩阵,来存储顶点边的信息 int vexnum,edgenum;//顶点树和边数 }MGraph; /*构造有向网的邻接矩阵*/ void CreateDN_AM(MGraph &G,int n,int e) { G.vexnum=n; G.edgenum=e; int i,j,k; int weight; for(i=0;i>G.vexs[i];//输入顶点信息 for(i=0;i>i>>j>>weight; G.edges[i][j]=weight; } } /*迪杰斯特拉算法求某个顶点到其余顶点的最短路径*/ void ShortestPath_DJ(MGraph &G,int v) { int i,j,k,min; int final[MAX_VERTEX_NUM];//该数组用来标识顶点是否已确定了最短路径 int dist[MAX_VERTEX_NUM]; string path[2*MAX_VERTEX_NUM]; for(i=0;idist[k]+G.edges[k][i] && final[i]==0) { dist[i]=dist[k]+G.edges[k][i]; path[i]=path[k]+G.vexs[i]; } }//从整体上来看就是算出k的邻接点的当前最短路径 } } void main() { freopen("in.txt","r",stdin); MGraph G; CreateDN_AM(G,7,11); ShortestPath_DJ(G,0); } 

迪杰斯特拉算法主要是采用了一个dist一维数组,来存储源点到其它顶点的最短路径,然后不断更新。

你可能感兴趣的:(数据结构)