最短路径算法Dijkstra算法(迪杰斯特拉算法)
2015-05-22 22:16
316 查看
最短路径算法Dijkstra算法(迪杰斯特拉算法)
算法过程
来源网络算法思想
个人理解其实就是借住已知的最短路径求下一条最短路径 (最短路径上任意段均为最短路径)
如果当前找到的比上一次短则跟新距离
代码
[code]#include<iostream> #include<stack> using namespace std; #define M 100 #define N 100 typedef struct MGraph { int matrix [M]; int n; //定点个数 int e; //边的个数 }MGraph; //dist[i] 表示当前找到的v0到i的最短距离 //path[i] 表示v0到i i的前一节点 void Dij(MGraph g,int *dist,int *path, int v0) { bool* visted=new bool[g.n]; //初始化找到的最短距离 int i; for( i=0;i<g.n;i++) { visted[i]=false; if(g.matrix[v0][i]>0&&i!=v0) { dist[i]=g.matrix[v0][i];//当前所找到的v0到i的最短距离 path[i]=v0; } else{ dist[i]=INT_MAX; path[i]=-1; //到该点没有路径 } } visted[v0]=true; dist[v0]=0; path[v0]=v0; for( i=1;i<g.n;i++) { //在当前距离记录中找到最短的距离 int mindist=INT_MAX; int u; //记录最短距离所对应的节点 for(int j=0;j<g.n;j++) { if(dist[j]<mindist&&visted[j]==false) { mindist=dist[j]; u=j; } } visted[u]=true;//找到了以u为终点的最短距离 //借住该点计算改点到其他未访问点的距离 for(int k=0;k<g.n;k++) { if(visted[k]==false&&g.matrix[u][k]>0&&g.matrix[u][k]+dist[u]<dist[k]) { dist[k]=g.matrix[u][k]+dist[u]; path[k]=u; } } } } //显示v0 ->v最短路径 void showpath(int* path,int v0,int v) { stack<int> s; while(v!=v0){ s.push(v); v=path[v]; } s.push(v); while(!s.empty()){ cout<<s.top()<<" "; s.pop(); } } int main() { int n,e; while(cin>>n>>e) { int* dist=new int ; int* path=new int ; int i,j,s,t,w,v0; MGraph g; g.n=n; g.e=e; for( i=0;i<M;i++) { for( j=0;j<N;j++){ g.matrix[i][j]=0; } } for( i=0;i<e;i++) { cin>>s>>t>>w; g.matrix[s][t]=w; } cin>>v0; Dij( g,dist,path, v0); for( i=0;i<n;i++){ if(i!=v0){ showpath( path, v0, i); cout<<dist[i]<<endl; } } return 0; } }
相关文章推荐
- 用java编写的一个迪杰斯特拉算法(单源最短路径算法,Dijkstra算法)。
- 用java编写的一个迪杰斯特拉算法(单源最短路径算法,Dijkstra算法)。
- 数据结构与算法12:单源最短路径Dijkstra算法
- 最小生成树(Prime算法、Kruskal算法)和最短路径算法(Floyd算法、DijKstra算法)
- 最短路径算法-Dijkstra算法的实质与变体
- 贪心算法--Dijkstra算法(单源最短路径算法)
- 最短路径(迪杰斯特拉算法)- 数据结构和算法64
- 算法系列-最短路径Dijkstra算法
- 最短路径算法——Dijkstra算法
- 图论算法之最短路径(Dijkstra算法)
- 最短路径算法——Dijkstra算法
- 算法——单源最短路径:Bellman-Ford算法、Dijkstra算法
- 带权有向图(最短路径算法Dijkstra算法)
- 最短路径算法设计与实现(Dijkstra算法和Floyd算法)
- 最短路径算法之二——Dijkstra算法
- 最短路径算法-迪杰斯特拉Dijkstra算法
- dijkstra算法,单源最短路径算法,含记录路径
- 最短路径算法—Dijkstra算法和BellmanFord算法
- 【数据结构】算法7.15 Dijkstra算法 单源点最短路径
- 图论——单源最短路径算法之Dijkstra算法