Dijkstra模板
来源:互联网 发布:易语言编程教学 编辑:程序博客网 时间:2024/05/18 00:28
数据:
60 2 50 3 301 0 21 4 82 5 72 1 154 3 45 3 105 4 18-1 -1 -1
#include<iostream>#include<cstring>#include<cstdio>#define INF 1000000#define MAXN 20int n,Edge[MAXN][MAXN],s[MAXN],dist[MAXN],path[MAXN];void Dijkstra(int v0){int i,j,k;for(i=0;i<n;++i){dist[i] = Edge[v0][i];s[i] = 0;if(i!=v0&&dist[i]<INF)path[i] = v0;else path[i]=-1;}s[v0] = 1; dist[v0] = 0;for(i=0;i<n-1;++i){int min = INF,u=v0;for(j=0;j<n;++j){if(!s[j]&&dist[j]<min){u = j;min = dist[j];}}s[u] = 1;for(k=0;k<n;++k){if(!s[k]&&Edge[u][k]<INF&&dist[u]+Edge[u][k]<dist[k]){dist[k] = dist[u] + Edge[u][k];path[k] = u;}}}}int main(){int i,j;int u,v,w;scanf("%d",&n);while(1){scanf("%d%d%d",&u,&v,&w);if(u==-1&&v==-1&&w==-1)break;Edge[u][v] = w;}for(i=0;i<n;++i){for(j=0;j<n;++j){if(i==j)Edge[i][j] = 0;else if(Edge[i][j]==0)Edge[i][j] = INF;}}Dijkstra(0);int shortest[MAXN];for(i=1;i<n;++i){printf("%d\t",dist[i]);memset(shortest,0,sizeof(shortest));int k=0;shortest[k] = i;while(path[shortest[k]]!=0){k++;shortest[k] = path[shortest[k-1]];}k++;shortest[k] = 0;for(j=k;j>0;j--)printf("%d->",shortest[j]);printf("%d\n",shortest[0]);}return 0;}
0 0
- dijkstra 模板
- dijkstra 模板
- Dijkstra模板
- dijkstra模板
- dijkstra模板
- Dijkstra模板
- (Dijkstra模板)
- Dijkstra模板
- Dijkstra模板
- Dijkstra 模板
- Dijkstra模板
- dijkstra 模板
- dijkstra模板
- dijkstra模板
- dijkstra模板
- [模板]Dijkstra
- dijkstra 模板
- 模板 Dijkstra
- Android 分区挂载
- HP hands off OpenVMS development to VSI 【OpenVMS重获新生】
- Ant
- jQuery 学习笔记
- linux bash shell中,单引号、 双引号,反引号(``)的区别及各种括号的区别
- Dijkstra模板
- 使用移位操作符实现无符号整数位反转
- KMP 算法完整版
- Unique Path II
- UVA 12437 Kisu Pari Na 2
- 计算机字符编码
- 安装Tomcat,过程中需要配置的环境变量及遇到的问题
- HDU5326-Work (建反图,遍历)
- IOS开发概述-09.UIController和控制器的View