hdu 1874畅通工程续+2544最短路+3790最短路径(dijkstra算法入门题)
来源:互联网 发布:hsv颜色模型算法实现 编辑:程序博客网 时间:2024/05/17 00:02
1874
#include <iostream>#include <string.h>#define maxn 300#define INF 0x3f3f3f3fusing namespace std;int a[maxn][maxn];int low[maxn];bool flag[maxn];void DIJ(int begin,int n)///输入起始点,和顶点个数{ int k; memset(flag,false,sizeof(flag)); flag[begin]=true; for(int i=0; i<=n; i++) low[i]=a[begin][i]; for (int i = 1; i < n ; ++i) { int min=INF; for(int j=0; j<n; j++) if(!flag[j]&&low[j]<min) { min=low[j]; k=j; } flag[k]=true; for(int j=0; j<n; j++) if(!flag[j]&&a[k][j]+low[k]<low[j]) low[j]=a[k][j]+low[k]; }}int main(){ int n,m,x,y,d,begin,t; while(cin>>n>>m) { for(int i=0; i<n; i++) for(int j=0; j<n; j++) if(i==j) a[i][j]=0; else a[i][j]=INF; for(int i=0; i<m; i++) { cin>>x>>y>>d; if(d<a[x][y]) a[x][y]=a[y][x]=d; } cin>>begin>>t; DIJ(begin,n); if(low[t]<INF) cout<<low[t]<<endl; else cout<<"-1"<<endl; } return 0;}
2544
#include <iostream>#include <string.h>#define maxn 300#define INF 0x3f3f3f3fusing namespace std;int a[maxn][maxn];int low[maxn];bool flag[maxn];void DIJ(int begin,int n){ int k; memset(flag,false,sizeof(flag)); flag[begin]=true; for(int i=1; i<=n; i++) low[i]=a[begin][i]; for (int i = 2; i <= n ; ++i) { int min=INF; for(int j=1; j<n; j++) if(!flag[j]&&low[j]<min) { min=low[j]; k=j; } flag[k]=true; for(int j=1; j<=n; j++) if(!flag[j]&&a[k][j]+low[k]<low[j]) low[j]=a[k][j]+low[k]; } }int main(){ int n,m,x,y,d; while(cin>>n>>m&&(m||n)) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i==j) a[i][j]=0; else a[i][j]=INF; for(int i=0; i<m; i++) { cin>>x>>y>>d; if(d<a[x][y]) a[x][y]=a[y][x]=d; } DIJ(1,n); if(low[n]<INF) cout<<low[n]<<endl; } return 0;}
3790
#include <iostream>#include <string.h>#include <stdio.h>#define maxn 1005#define INF 0x3f3f3f3fusing namespace std;int dis[maxn][maxn];int cost[maxn][maxn];int lowdis[maxn];bool flag[maxn];int lowcost[maxn];void DIJ(int begin,int n){ int k; memset(flag,false,sizeof(flag)); flag[begin]=true; for(int i=1; i<=n; i++) { lowdis[i]=dis[begin][i]; lowcost[i]=cost[begin][i]; } for (int i = 1; i < n ; ++i) { int mindis=INF,mincost=INF; for(int j=1; j<=n; j++) if(!flag[j]&&lowdis[j]<mindis) { mindis=lowdis[j]; mincost=lowcost[j]; k=j; } else if(!flag[j]&&lowdis[j]==mindis&&lowcost[j]<mincost) { mindis=lowdis[j]; mincost=lowcost[j]; k=j; } flag[k]=true; for(int j=1; j<=n; j++) if(!flag[j]&&dis[k][j]+lowdis[k]<lowdis[j]) { lowdis[j]=dis[k][j]+lowdis[k]; lowcost[j]=cost[k][j]+lowcost[k]; } else if(!flag[j]&&dis[k][j]+lowdis[k]==lowdis[j]&&lowcost[k]+cost[k][j]<lowcost[j]) { lowdis[j]=dis[k][j]+lowdis[k]; lowcost[j]=cost[k][j]+lowcost[k]; } }}int main(){ int n,m,x,y,d,c,begin,t; while(scanf("%d%d",&n,&m),(m||n)) { for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(i==j) { dis[i][j]=0; cost[i][j]=0; } else { dis[i][j]=INF; cost[i][j]=INF; } for(int i=0; i<m; i++) { scanf("%d%d%d%d",&x,&y,&d,&c); if(d<dis[x][y]||(dis[x][y]==d&&cost[x][y]>c)) { dis[x][y]=dis[y][x]=d; cost[x][y]=cost[y][x]=c; } } scanf("%d%d",&begin,&t); DIJ(begin,n); cout<<lowdis[t]<<" "<<lowcost[t]<<endl; } return 0;}
阅读全文
0 0
- hdu 1874畅通工程续+2544最短路+3790最短路径(dijkstra算法入门题)
- 【最短路径dijkstra算法】HDU 1874---畅通工程续
- (最短路径 Dijkstra)HDU 1874 畅通工程续
- HDU 1874 畅通工程续 / dijkstra算法 最短路实现
- HDU 1874 畅通工程续 最短路径入门(dijkstra)
- 【最短路径spfa算法】HDU 1874---畅通工程续
- 畅通工程续 最短路径 Dijkstra
- HDU 1874.畅通工程续【最短路径(Dijkstra算法)】【4月14】
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
- HDOJ 1874 畅通工程续(最短路径,dijkstra算法,spfa邻接表,floyd算法)
- 1874 畅通工程续 (最短路 Dijkstra Floyd入门题目)
- HDOJ/HDU---1874 畅通工程续 最短路(dijkstra)
- HDU 1874 畅通工程续【最短路 dijkstra & floyed & SPFA 】
- #HDU 1874 畅通工程续 【Dijkstra最短路】
- 【HDU】-1874-畅通工程续(最短路)(dijkstra)
- 最短路 Dijkstra Floyd HDU 1874 畅通工程续
- HDU 1874 畅通工程续 【最短路入门题】
- HDU 1874 畅通工程续 【最短路入门题】
- eclipse代码注释模板
- Shell编程中变量的声明、引用及作用域
- 按照XXXX-XX-XX XX:XX:XX的格式,打印出前一天的时间
- 非常全面的php日期时间运算汇总
- IDEA 2017破解 license server激活
- hdu 1874畅通工程续+2544最短路+3790最短路径(dijkstra算法入门题)
- 开始写技术博客
- Leetcode#69: Sqrt(x)
- 高可用性
- Django-Model操作数据库(增删改查、连表结构)
- python whil循环
- idea自动解析set/get方法的插件
- Maven,SSM框架搭建(连接ORACLE数据库)
- 使用 Java 操作 Redis