Dijkstra单源最短路,邻接矩阵形式(模板)
2016-08-22 19:34
369 查看
/* 单元最短路径,Dijkstra算法,邻接矩阵形式,复杂度为O(n^2) 求出源beg到所有点的最短路径,传入图的顶点数和邻接矩阵cost[][] 返回各点的最短路径lowcost[],路径pre[],pre[i]记录beg到i路径上的父结点,pre[beg]=-1 可以更改路径权类型,但权值必须为非负 */ #include<iostream> #include<cstdio> #include<string.h> #include<fstream> using namespace std; const int MAXN=1010; #define typec int const typec INF=0x3f3f3f3f; bool vis[MAXN]; int pre[MAXN]; void Dijkstra(typec cost[][MAXN],typec lowcost[],int n,int beg) { for(int i=0;i<n;i++) { lowcost[i]=INF; vis[i]=false; pre[i]=-1; } lowcost[beg]=0; for(int j=0;j<n;j++) { int k=-1; int Min=INF; for(int i=0;i<n;i++) if(!vis[i]&&lowcost[i]<Min) { Min=lowcost[i]; k=i; } if(k==-1) break; vis[k]=true; for(int i=0;i<n;i++) if(!vis[i]&&lowcost[k]+cost[k][i]<lowcost[i]) { lowcost[i]=lowcost[k]+cost[k][i]; pre[i]=k; } } } int main() { freopen("in.txt","r",stdin); int n; cin>>n; typec cost [MAXN]; typec lowcost ; int e; cin>>e; memset(cost,INF,sizeof(cost)); for(int i=0;i<e;i++) { int x,y; cin>>x>>y; cin>>cost[x][y]; } Dijkstra(cost,lowcost,n,0); for(int i=0;i<=n-1;i++) cout<<lowcost[i]<<" "; cout<<endl; for(int i=0;i<=n-1;i++) cout<<pre[i]<<" "; cout<<endl; return 0; }
相关文章推荐
- 最短路-dijkstra与floyd的邻接矩阵模板示例
- 最短路-dijkstra与floyd的邻接矩阵模板示例
- 最短路-dijkstra与floyd的邻接矩阵模板示例
- 最短路-dijkstra与floyd的邻接矩阵模板示例
- HDU 2544 最短路 floyd djkstra(邻接表,邻接矩阵) spfa bellman-ford 模板题
- hdu 2544 最短路 dijkstra模板
- Dijkstra算法模板---单源最短路---邻接矩阵模板+题目
- HDU 2544最短路dijkstra模板题
- ACM_最短路模板(SPFA,Dijkstra,Floyd)
- 最短路~dijkstra模板
- 最短路模板[spfa][dijkstra+堆优化][floyd]
- Floyd,Dijkstra,SPFA模板整理(以[HDU2544-最短路]为例 )
- Dijkstra 单源最短路 模板 uva11374
- 最短路(Dijkstra)Kuangbin大神的模板
- POJ - 2387 Til the Cows Come Home(最短路Dijkstra模板题)
- uva 11374 最短路+记录路径 好题 dijkstra优先队列优化算法 邻接表法 可做模板 G++提交
- 最短路~dijkstra堆优化模板
- 最短路 floyd dijkstra 模板
- 单源最短路模板_SPFA_Dijkstra(堆优化)_C++
- aoj-2249 Road Construction 单源最短路dijkstra+堆优化(模板)