PAT1030
来源:互联网 发布:python 爬拉钩 编辑:程序博客网 时间:2024/06/08 01:14
输入
4 5 0 30 1 1 201 3 2 300 3 4 100 2 2 202 3 1 20
输出
0 2 3 3 40
程序
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;//最大顶点数 const int MAXV=510;const int INF=0x3fffffff;//n为顶点数,m为边数,st和ed分别为起点和终点//G为距离矩阵,cost为花费矩阵//d[]记录最短距离,c[]记录最小花费int n,m,st,ed,G[MAXV][MAXV],cost[MAXV][MAXV];int d[MAXV],c[MAXV],pre[MAXV];bool vis[MAXV]={false};//S为起点 void Dijkstra(int s){ fill(d,d+MAXV,INF); fill(c,c+MAXV,INF); for(int i=0;i<n;i++) { pre[i]=i; } d[s]=0; c[s]=0; for(int i=0;i<n;i++) { int u=-1,MIN=INF; for(int j=0;j<n;j++) { if( vis[j]==false && d[j]<MIN ) { u=j; MIN=d[j]; } } if(u==-1) { return; } vis[u]=true; for(int v=0;v<n;v++) { if( vis[v]==false && G[u][v]!=INF ) { if( d[u]+G[u][v]<d[v] ) { d[v]=d[u]+G[u][v]; c[v]=c[u]+cost[u][v]; pre[v]=u; } else if( d[u]+G[u][v]==d[v] ) { if( c[u]+cost[u][v]<c[v] ) { c[v]=c[u]+cost[u][v]; pre[v]=u; } } } } }}//打印路径 void DFS(int v){ if(v==st) { printf("%d",v); return; } DFS(pre[v]); printf(" %d",v);} int main(){ scanf("%d%d%d%d",&n,&m,&st,&ed); int u,v; //初始化图G fill(G[0],G[0]+MAXV*MAXV,INF); for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); scanf("%d%d",&G[u][v],&cost[u][v]); G[v][u]=G[u][v]; cost[v][u]=cost[u][v]; } //迪杰斯特拉算法入口 Dijkstra(st); //打印路径 DFS(ed); //最短距离、最短路径下的最小花费 printf(" %d %d\n",d[ed],c[ed]); return 0;}
阅读全文
0 0
- pat1030
- PAT1030
- PAT1030
- 浙大pat1030
- PAT1030 Dijkstra
- pat1030 Travel Plan
- PAT1030 完美数列(25)
- PAT1030 Travel Plan
- PAT1030完美数列(25)
- PAT1030完美数列
- PAT1030 完美数列
- pat1030完美数列bug总结,
- Python实现PAT1030 完美数列
- win10安装win7虚拟机记录
- 创业企业如何才能具有国际范儿?瀚思科技告诉你
- Sublime Text全程指南
- windows下用docker安装tensorflow
- Python与C之间的相互调用(Python C API及Python ctypes库)
- PAT1030
- 23.Nginx实现多个项目的统一访问地址
- View之View树View坐标系View滑动
- QNX学习笔记-QNX SDP各版本下载
- 如何获取一个Android App APK的所有Activity类名?
- 埃氏筛法
- tar命令的详细解释
- 条条大路通罗马LS-GAN:把GAN建立在Lipschitz密度上
- 绝对路径与相对路径在上传文件中的对比