最短路 Dijkstra算法模板(带路径输出)
2012-07-18 20:19
405 查看
最朴素最短路
适用条件:边权必须为非负;
以HDU2544为例
View Code
适用条件:边权必须为非负;
以HDU2544为例
View Code
#include<stdio.h> #include<string.h> #define INF 100000000 #define maxn 1001 bool vis[maxn]; int adj[maxn][maxn],dis[maxn],pre[maxn];//pre[]记录前驱 int n, m; void dijkstra(int v) { int i, j, u , min; for(i=0;i<=n;i++) { dis[i]=adj[v][i]; vis[i]=0; //if(i!=v&&adj[v][i]!=INF)pre[i] = v; // else pre[i] = -1; } vis[v]=1;dis[v]=0; for(i=1;i<n;i++) { min = INF; for(j=1;j<=n;j++) { if(!vis[j]&&min > dis[j]) { min = dis[j]; u = j; } } if(min == INF)break; vis[u]=1; for(j=1;j<=n;j++) { if(!vis[j]&&adj[u][j]!=INF&&dis[u]+adj[u][j]<dis[j]) { dis[j] = adj[u][j] + dis[u]; // pre[j] = u; } } } } int main() { int i, j, x, y, w; while(~scanf("%d%d",&n,&m)&&n) { for(i=0;i<=n;i++) { for(j=0;j<=n;j++) if(i==j)adj[i][j]=0; else adj[i][j] = INF; } while(m--) { scanf("%d%d%d",&x,&y,&w); adj[x][y] = w; adj[y][x] = w; } dijkstra(0); printf("%d\n",dis ); //以下为输出路径 /*int p, len=0, ans[maxn]; p = n-1; while(p!=0) { ans[len++] = p; p = pre[p]; } printf("0->"); for(i=len-1;i>=0;i--) printf("%d",ans[i]); puts(""); */ } return 0; }
相关文章推荐
- 【天梯赛】L2-001. 紧急救援(dijkstra算法找最短路和最短路径数 + 输出路径)
- Minimum Transport Cost hdu 点权和边权的最短路+输出字典序最小的路径
- L2-001. 紧急救援(最短路dij+路径记录)(模板)
- wordpress 输出调用当前模板文件的路径
- uva 11374 最短路+记录路径 dijkstra最短路模板
- 最短路径 自己写的一个很简单的模板 dijkstra算法
- HDOJ题目2544最短路(最短路径,floyd,模板)
- HDU 1385 Minimum Transport Cost 【最短路 + 最小字典序路径输出】
- 【hdu 2544】最短路 (dijkstra算法模板题)
- 最短路(输出路径)
- Dijkstra求最短路的条数,并输出最短路径和最短路经过的点的最大和
- uva 11374 最短路+记录路径 dijkstra最短路模板
- LIS+输出路径模板(1160)
- 做了一道跑大数据的最短路挂了,基于vector的二维模拟邻接表实现Dijkstra算法(*【模板】)
- 欧拉输出路径--dfs模板
- Dijkstra算法---单源最短路(基础模板)
- zkw最小费用流模板,输出流量路径
- POJ2457 dijksta求最短路&amp;&amp;输出走过的路径
- 图论最短路径 Dijkstra算法和模板
- HDU 2544 最短路(我的dijkstra算法模板、SPAFA算法模板)