迪杰斯特拉算法求最短路径 C++代码实现
2010-12-05 12:39
351 查看
#include<iostream> #include<string> 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<n;i++) cin>>G.vexs[i];//输入顶点信息 for(i=0;i<n;i++) for(j=0;j<n;j++) G.edges[i][j]=MAX;//将矩阵初始化为MAX for(k=0;k<e;k++) { cin>>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;i<G.vexnum;i++) {//初始化工作 dist[i]=G.edges[v][i];//dist数组用来存储当前找到的v到其他各顶点的最短路径 if(dist[i]<MAX) path[i]=G.vexs[v]+G.vexs[i];//如果v到i有边的话,把顶点字符存到path字符数组中,表示路径 else path[i]=""; final[i]=0;//初始化标识数组为0 } dist[v]=0; final[v]=1; for(j=1;j<G.vexnum;j++) { min=MAX; for(i=0;i<G.vexnum;i++) if(dist[i]<min && final[i]==0) { min=dist[i]; k=i; }//找到dist数组中最小值的位置k cout<<path[k]<<" "<<dist[k]<<endl;//输出最短路径 final[k]=1;//设置标志位 for(i=0;i<G.vexnum;i++) {//遍历每个顶点i和当前的已求出的最短路径的顶点k作比较,若从源点经过顶点k到顶点i的路径,比dist[i]小, //则更新顶点dist[i] if(dist[i]>dist[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一维数组,来存储源点到其它顶点的最短路径,然后不断更新。
相关文章推荐
- 迪杰斯特拉算法求最短路径 C++代码实现
- 用c++代码实现贪心算法求解最短路径问题
- BFS和DFS求最短路径的C++代码实现
- C++代码,数据结构-最短路径(两种情况)(迪杰斯特拉算法和弗洛伊德算法)
- 关于pgrouting 的 最短路径 思路解析 以及C++代码实现
- Djkstra最短路径算法的c++代码实现
- 最短路径迪杰斯特拉算法实现
- 图的点对最短路径算法(C++实现)
- 迪杰斯特拉算法处理有向图中最短路径的(dijkstra)Java实现及升级
- 最短路径路径Dijkstra算法模版代码C++
- 迪杰斯特拉算法求单源最短路径(c++)
- 图的邻接表实现迪杰斯特拉算法求最短路径
- 图(有向图,无向图)的邻接矩阵表示C++实现(遍历,拓扑排序,最短路径,最小生成树) Implement of digraph and undigraph using adjacency matrix
- C++ 设置和获取当前工作路径的实现代码
- 编程算法 - 迷宫的最短路径 代码(C++)
- 迷宫最短路径的C++实现(队列:广度优先)
- 【C# dijkstra迪杰斯特拉算法 最短路径】迪杰斯特拉算法 最短路径的C#实现
- 图的拓扑排序、关键路径、最短路径算法 -- C++实现
- 最短路径问题——Dijkstra算法(C++实现)
- 有向图某顶点到其他顶点最短路径的C程序实现代码(Dijkstra算法)